我們可以在非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