【最佳实践系列】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()方法包装事件响应程序并更改全局属性。



阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页