Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF多线程和绑定-无更新_C#_Wpf_Mvvm_Data Binding - Fatal编程技术网

C# WPF多线程和绑定-无更新

C# WPF多线程和绑定-无更新,c#,wpf,mvvm,data-binding,C#,Wpf,Mvvm,Data Binding,我正在尝试在新任务期间将ProgressBar-IsInterminate的属性更改为true。我已将DataContext添加到progressbar的statusbar父级并绑定到progressbar属性: <StatusBar> <StatusBar.DataContext> <viemodel:EventsViewModel/> </StatusBar.DataContext> &l

我正在尝试在新任务期间将ProgressBar-IsInterminate的属性更改为true。我已将DataContext添加到progressbar的statusbar父级并绑定到progressbar属性:

<StatusBar>
        <StatusBar.DataContext>
            <viemodel:EventsViewModel/>
        </StatusBar.DataContext>
<ProgressBar Name="pbProgress" IsIndeterminate="{Binding Pennding}"/>
</StatusBar>
 private static bool _pending = false;

    public bool Pennding
    {
        get { return _pending; }
        set
        {
            _pending = value;
           NotifyPropertyChanged();
        }
    }
并尝试更改命令中的属性:

App.Current.Invoke(() => new EventsViewModel { Pennding = true }));

但一切都没有改变!我已经检查了关于绑定的调试信息,没有错误

您需要更改已绑定的EventsViewModel的特定实例-您当前正在使用新语法创建一个新实例

您的代码应该是:

<StatusBar.DataContext>
    <viemodel:EventsViewModel x:Name="MyEventVM"/>
</StatusBar.DataContext>
<ProgressBar Name="pbProgress" IsIndeterminate="{Binding Pennding}"/>

谢谢你的回复。但是,如果我将属性设置为static,我不会为每个实例使用Pennding属性获得相同的值?将为当前实例(即新实例)发出通知。无法为通过更改静态备份字段绑定的实例发出通知。另外,我真的不会这么做——有一个实例成员和一个静态支持字段是非常令人困惑的。它变硬了,我不明白。因此,我应该使用与命令类中相同的名称将MyEventVM添加到我的ViewModel类中?最终的问题是,您需要有一种方法来访问绑定到控件的特定实例,否则属性中的更改无法正确通知UI。因为OP提到了MVVM,所以我假设在控件后面还有另一个ViewModel包含状态栏的UserControl。因此,应通过绑定设置DataContext:。当然,这只是一个假设,只要我们看不到更多的代码,在lambda中创建的实例实际上并没有绑定到任何东西。您的状态栏创建自己的实例并侦听其更改通知。但既然你不改变这个例子,那里就什么也没发生。能否将其他ViewModel的代码发布到开始任务的位置?这是我的命令,我在这里工作。我已经将静态EventsViewModel字段添加到此类,将x:Name添加到DataContect到状态栏,并且它可以工作-但我不知道为什么。您是否在Begging设置了DataContext?Tesy'我已经将上下文添加到状态栏,并在解包过程中检查它。
App.Current.Invoke(() => { MyEventVM.Pennding = true; }));