我有一个静态类,它对电话交换器进行建模,它在各自的窗口中实例化Phone对象;交换器维护一个实例化的电话列表,我需要一种从一个phone对象“拨号”到另一个对象的方法--例如,如果我创建了两个phone对象,并在第一个对象的文本框中输入第二个电话号码,我希望用第一个电话(呼叫者)号码更新第二个phone上的属性
我已经做过数据绑定,但我是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中的逻辑,在第一部电话上单击呼叫按钮后,要连接的电话将分配给交换列表(如果存在)中的电话对象(接收器)-至此,这两个对象已实例化,并且都显示在各自的窗口中。
我将第二个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?
}非常感谢
发布于 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/
它的工作原理如下:
myModel.Subscribe("MeterReading", obj => MyActionThatDoesStuff());因此,如果两个不同的ViewModels订阅了myModel.MeterReading,那么如果属性发生更改,它们都可以收到更新。
https://stackoverflow.com/questions/12867127
复制相似问题