0

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

我已经完成了数据绑定,但我是 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 列表(如果存在)中分配给电话对象(接收器) - 到现在为止这两个对象被实例化并且都显示在它们自己的窗口中。

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

 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?




    }

非常感谢

4

1 回答 1

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,如果属性发生更改,它们都可以接收更新。

于 2012-10-12T22:29:14.730 回答