订阅INotifyPropertyChanged

时间:2012-10-12 21:07:50

标签: wpf

我有一个静态类,用于模拟电话交换机,它在各自的窗口中实例化电话对象;交换机维护一个实例化的电话列表,我需要一种方法从一个电话对象“拨号”到另一个电话对象 - 例如,如果我创建了两个电话对象并在第一个文本框中输入第二个电话号码我想要使用第一部电话(来电号码)

更新第二部手机上的财产

我已完成数据绑定,但我是INotifyPropertyChanged的新手,这就是我所拥有的:

电话课程:

 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中的逻辑,一旦在第一部手机上点击了呼叫按钮,它想要连接的手机就会从我的Exchange列表中分配给Phone对象(接收者)(如果存在) - 到现在为止,这两个对象被实例化,并且都在自己的窗口中显示。

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

 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?




    }

非常感谢

1 个答案:

答案 0 :(得分:0)

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

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

它会像这样工作:

myModel.Subscribe("MeterReading", obj => MyActionThatDoesStuff());

因此,如果2个不同的ViewModel订阅myModel.MeterReading,那么如果属性发生更改,他们都可以接收更新。