首页 > 其他分享 >[WPF] 随笔1:MVVM在ViewModel更新Image控件的BitmapImage值时报:必须在与 DependencyObject 相同的线程上创建 DependencySource

[WPF] 随笔1:MVVM在ViewModel更新Image控件的BitmapImage值时报:必须在与 DependencyObject 相同的线程上创建 DependencySource

时间:2023-09-25 10:55:47浏览次数:58  
标签:控件 ViewModel MVVM BitmapImage bitmap SetPAIPic 线程 PAIPic

MVVM在ViewModel更新Image控件的BitmapImage值时报:必须在与 DependencyObject 相同的线程上创建 DependencySource
原因:必须在UI线程创建BitmapImage =>链接
解决方案:使用MemoryStream加载图片,并在UI线程转换成BitmapImage =>链接

接下来是我的写法
Tip:我用的是MVVMLight
View Model.cs

  private BitmapImage _PAIPic;
  public BitmapImage PAIPic { get => _PAIPic; set { _PAIPic = value; RaisePropertyChanged(); } }

业务类.cs

  using (var ms = new MemoryStream(new HttpClient().GetByteArrayAsync(item.Url).Result))
  {
    Messenger.Default.Send<MemoryStream>(ms, "SetPAIPic");
  }

Xaml.cs

---------------构造函数-----------------
  //注册Messenger
  Messenger.Default.Register<MemoryStream>(this, "SetPAIPic", (o => SetPAIPic(o)));
---------------方法------------------
        void SetPAIPic(MemoryStream memoryStream)
        {
            Dispatcher.Invoke(() =>
            {
                var bitmap = new BitmapImage();
                bitmap.BeginInit();
                bitmap.CacheOption = BitmapCacheOption.OnLoad;
                bitmap.StreamSource = memoryStream;
                bitmap.EndInit();
                ViewModel.PAIPic = bitmap;
            });
        }

Xaml

  <Image
    Grid.Row="2"
    HorizontalAlignment="Center"
    Source="{Binding ViewModel.PAIPic}"
    Stretch="Fill" />

标签:控件,ViewModel,MVVM,BitmapImage,bitmap,SetPAIPic,线程,PAIPic
From: https://www.cnblogs.com/niuniuyouguo/p/17727388.html

相关文章

  • c# MVC分页控件帮助类
     c#使用mvc分页控件///<summary>///获得伪静态页码显示链接///</summary>///<paramname="curPage">当前页数</param>///<paramname="countPage">总页数</param>///<paramname="url">超级......
  • 循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(6) -- 窗口控
    在我们窗口新增、编辑状态下的时候,我们往往会根据是否修改过的痕迹-也就是脏数据状态进行跟踪,如果用户发生了数据修改,我们在用户退出窗口的时候,提供用户是否丢弃修改还是继续编辑,这样在一些重要录入时的时候,可以避免用户不小心关掉窗口,导致窗口的数据要重新录入的尴尬场景。本篇随......
  • 记录一次:Winform的控件的Visible属性异常问题
    一:背景1.讲故事有一次同事找到我,说以下代码中:btnPlanAppend控件:客户电脑显示正常、开发者电脑调试时无法显示btnAppend可以在界面中显示出来btnPlanAppend控件在界面上就是不显示privatevoidCheck_Privilege(){stringsPrivilege=ClientUtils.GetPrivilege(g_sU......
  • Teamcenter RAC 开发之《日期控件》
    背景TeamcenterRac开发客制化表单过程中,发现一个问题,就是使用日期控件JXDatePicker展示无法实现"签出"禁用控件输入解决办法选择使用JDateChooser(jcalendar),根据实际需要removeActionListener,从而达到禁止输入的用处......
  • 进程注入之ListPlanting——滥用listview控件的消息回调函数
    效果:注入代码到“注册表编辑器”(当然,必须是要有listview这种列表显示才可以执行)  ProcessInjection: ListPlanting Othersub-techniquesofProcessInjection(12)看看官方的介绍Adversariesmayabuselist-viewcontrolstoinjectmaliciouscodeinto......
  • vue项目-封装树形控件公用组件
    vue项目中,如h5端,第三方的树形选择器无法满足项目开发时,原生封装tree控件,通过判断是否存在子节点,循环递归组件完成树形封装,通过vue指令实现跨级传递数据或方法封装树形组件如下:1<template>2<divclass="tree-select-page">3<divclass="tree-item"v-for="item......
  • 【Vue】大悟!MVVM模型
    hello,我是小索奇,精心制作的Vue教程持续更新哈,想要学习&巩固&避坑就一起学习叭~MVVM模型Vue虽然没有完全遵循MVVM模型,但Vue的设计也收到了它的启发在文档中也会使用VM(ViewModel的缩写)这个变量名表示Vue实例(Vue作者参考了MVVM模型,并非其创建的)img模型说明M:模型Model-对应data中的数......
  • Qt中QGroupBox控件上禁用标志怎么去掉
    ref: https://blog.csdn.net/u011281951/article/details/131316569问题描述:如下图,使用qt新建一个工程,发现QGroupBox控件上总是有个禁用标志,有时候又没有,不清楚怎么回事,网上查了一圈没发现合适的答案,摸索一圈好像找到窍门了,记录下来,气候作为参考(网上的小伙伴如清楚这块的配置,欢......
  • bcb控件拖放
    控件分为两种:有Handle的和无Handle的。一、对于有Handle的控件,如Button,Edit类可以使用如下方法:在控件的MouseMove事件中写入:WORDSC_DragMove=oxF012;ReleaseCapture();((TWinControl*)Sender)->Perform(WM_SYSCOMMAND,SC_DragMove,0);二、对于没有Handle的控件,如Label,Imag......
  • 界面控件DevExpress的VS报表设计器 v23.1——启动速度全面提升
    本文主要介绍在DevExpressv23.1这个版本发布周期中对VisualStudio报表设计器所做的改进,包括优化的启动时间、新的全局选项对话框等。屡获大奖的界面控件套包DevExpress 今年第一个重要版本v23.1正式发布,该版本拥有众多新产品和数十个具有高影响力的功能,可为桌面、Web和移动应......