【最佳實踐系列】WPF多個窗口間消息的實時傳遞與響應

本文提供一種基於全局更改通知屬性的消息傳遞方法,可以在本窗口以及多窗口間實現消息的實時傳遞和響應,具體實現如下步驟所示:

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();
        }
    }


2、在窗口1(主窗口)中設置一個TextBlock,並將主窗口的數據上下文置爲GlobalUse._Messager.MsgStr

<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()方法包裝事件響應程序並更改全局屬性。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章