zap*_*ico 8 .net c# silverlight mvvm
我有一个简单的场景,包括View,ViewModel和自定义类型类.
模型类是这样的:
public class Person : Validation.DataError, INotifyPropertyChanged
{
#region INotifyProperty
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
public global::System.String name
{
get
{
return _name;
}
set
{
_name= value;
RaisePropertyChanged("name");
}
}
private global::System.String _name;
Run Code Online (Sandbox Code Playgroud)
}
在ViewModel中我有一个Person属性:
private Model.Person person;
public Model.Person Person
{
get
{
return person;
}
set
{
this.person= value;
this.RaisePropertyChanged("Person");
this.SavePersonCommand.OnCanExecuteChanged();
}
}
Run Code Online (Sandbox Code Playgroud)
在我的视图中,我有一个绑定到Person.name的文本框
所以ViewModel没有执行set方法,因为Person对象仍然是相同的...它正在Model属性中执行set方法.
我想让用户更改人名并调用另一种方法(搜索Web服务和其他东西......),我认为此功能应该在ViewModel中.
我正在使用MVVM Light工具包中的Messenger在不同的视图模型之间以及视图和视图模型之间进行通信.
现在我不知道我是否应该使用调解员,或者我应该知道另一种方法来解决这个问题.
luk*_*ler 14
只需在ViewModel中订阅Person的PropertyChanged事件,并检查"Name"属性,或者您想要做的任何事情:
Person.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(Person_PropertyChanged);
void Person_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
if(e.PropertyName == "Name")
{
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7735 次 |
| 最近记录: |