我们可以在非UI线程中更新WPF控件的数据上下文吗?WPF线程:我可以在非UI线程中更新控件的数据上下文吗?
说我们有一个Label
有MyClass
作为数据上下文,并结合Content
到MyProperty
:
<Label Name="label" Content="{Binding MyProperty}" />
,
其中MyClass
很简单:
public class MyClass : INotifyPropertyChanged
{
int _myField;
public int MyProperty
{
get
{
return _myField;
}
set
{
_myField = value;
PropertyChanged(this, new PropertyChangedEventArgs("MyProperty"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
在非UI线程,我们可以使用myClass.MyProperty = "updated"
来更新标签的内容,但我们不能直接执行label.Content = "updated"
。那是对的吗?
我自己的答案:
这里是我发现:
- 从非UI线程,你不能更新控制;
- 从非UI线程,您可以可以更新控件的数据上下文的属性;
- 从非UI线程,您不能添加项目或从
ObserverableCollection
项目绑定到控件中删除项目。但是有一个解决办法:http://geekswithblogs.net/NewThingsILearned/archive/2008/01/16/have-worker-thread-update-observablecollection-that-is-bound-to-a.aspx
您能否给我更详细的收藏资料?谢谢。 – Shuo 2010-12-11 20:32:16
谢谢,我想我在这里得到了一个解决方案:http://geekswithblogs.net/NewThingsILearned/archive/2008/01/16/have-worker-thread-update-observablecollection-that-is-bound-to-a.aspx – Shuo 2010-12-11 20:38:14
我也使用过这个,但是有些代码不起作用(一些wpf对象不能从DispatcherObject继承)。 – Femaref 2010-12-11 20:46:53