首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >订阅INotifyPropertyChanged

订阅INotifyPropertyChanged
EN

Stack Overflow用户
提问于 2012-10-13 05:07:50
回答 1查看 148关注 0票数 0

我有一个静态类,它对电话交换器进行建模,它在各自的窗口中实例化Phone对象;交换器维护一个实例化的电话列表,我需要一种从一个phone对象“拨号”到另一个对象的方法--例如,如果我创建了两个phone对象,并在第一个对象的文本框中输入第二个电话号码,我希望用第一个电话(呼叫者)号码更新第二个phone上的属性

我已经做过数据绑定,但我是INotifyPropertyChanged的新手,下面是我的经验:

电话类:

代码语言:javascript
复制
 public class Phone : INotifyPropertyChanged
{
    private string _receivedNumber;
    public Phone(string phoneNumber)
    {
        PhoneNumber =  phoneNumber;
    }

    public string PhoneNumber
    {
        get;
        set;
    }



    public string Status
    {
        get;
        set;
    }

    public string ReceivedNumber
    {
        get { return _receivedNumber; }
        set
        {
            _receivedNumber = value;
            OnPropertyChanged("ReceivedNumber");
        }
    }

    private void OnPropertyChanged(string receivedNumber)
    {
        if (PropertyChanged !=null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(receivedNumber));
        }
    }


    public event PropertyChangedEventHandler PropertyChanged;
}

}

以下是我的PhoneWindow.xaml.cs中的逻辑,在第一部电话上单击呼叫按钮后,要连接的电话将分配给交换列表(如果存在)中的电话对象(接收器)-至此,这两个对象已实例化,并且都显示在各自的窗口中。

我将第二个phone ReceivedNumber属性设置为呼叫者,这就是我不确定的地方,如何更新绑定/上下文以反映第二个Phone对象上的呼叫者号码?

代码语言:javascript
复制
 private void BtnCallClick(object sender, RoutedEventArgs e)
    {
        string number = txtDialNumber.Text;
        if (String.IsNullOrEmpty(number) || !IsNumeric.IsValidNumber(number) || Exchange.RetrievePhone(number) == null)
        {

            MessageBox.Show("The number entered is not valid or the phone doesn't exist");
            return;
        }
        Phone receiver = Exchange.RetrievePhone(number);
        receiver.ReceivedNumber = _phone.PhoneNumber;
        receiver.PropertyChanged += //<--  How to implement this?




    }

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-13 06:29:15

我为MVVM模型编写了一个ModelBase抽象类,它允许订阅属性。

你可以在这里找到:http://xcalibur37.wordpress.com/2012/02/06/creating-a-viewmodel-base-part-iii-subscribing-can-make-all-the-difference/

它的工作原理如下:

代码语言:javascript
复制
myModel.Subscribe("MeterReading", obj => MyActionThatDoesStuff());

因此,如果两个不同的ViewModels订阅了myModel.MeterReading,那么如果属性发生更改,它们都可以收到更新。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12867127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档