本文提供一種基於全局更改通知屬性的消息傳遞方法,可以在本窗口以及多窗口間實現消息的實時傳遞和響應,具體實現如下步驟所示:
1、定義消息類和全局靜態消息資源
public class Messager : INotifyPropertyChanged
{
private string msgStr;
public string MsgStr
{
get { return msgStr; }
set
{
msgStr = value;
OnPropertyChanged(new PropertyChangedEventArgs("MsgStr"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(PropertyChangedEventArgs e)
{
if (PropertyChanged != null)
PropertyChanged(this, e);
}
public Messager()
{
MsgStr = "";
}
}
public class GlobalUse
{
public static Messager _Messager { get; set; }
static GlobalUse()
{
_Messager = new Messager();
}
}
<TextBlock Name="tb1" Text="{Binding Path=MsgStr}"></TextBlock>
public MainWindow()
{
InitializeComponent();
this.DataContext = GlobalUse._Messager;
}
3、在任意一個打開的窗口的某個事件中加入改變GlobalUse._Messager.MsgStr值的過程即可引起窗口1中相應文本的變化,例如在窗口2中置一按鈕,其Click事件如下
Task.Factory.StartNew(() =>
{
for (int i = 0; i < 100; i++)
{
System.Threading.Thread.Sleep(10);
GlobalUse._Messager.MsgStr = i.ToString();
}
});
總結一下,其關鍵技術包括三個部分,即1)全局的更改通知屬性;2)綁定數據和設置數據源;3)使用Task.Factory.StartNew()方法包裝事件響應程序並更改全局屬性。