我有一個View,ViewModel和自定義類型類的簡單場景。MVVM模型到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;
}
在視圖模型我有一個Person屬性:
private Model.Person person;
public Model.Person Person
{
get
{
return person;
}
set
{
this.person= value;
this.RaisePropertyChanged("Person");
this.SavePersonCommand.OnCanExecuteChanged();
}
}
在我看來,我有一個綁定到一個文本框Person.name
因此,ViewModel未執行se t方法,因爲Person對象仍然是相同的......它正在執行Model屬性中的set方法。
我想讓用戶更改人名並調用另一個方法(通過Web服務和其他東西搜索......),我認爲這個功能應該在ViewModel中。
我使用MVVM Light工具包中的Messenger在不同的視圖模型之間以及視圖和視圖模型之間進行通信。
現在我不知道我是否也應該使用中介,或者如果我應該知道另一種解決方法。
看起來你打算去一個好路徑。我看到你正在實施驗證/ INotifyPropertyChanged和東西。也許你想看看Csla.Net,它會爲你處理這些東西。它提供了一個構建偉大模型的框架,併爲它支持的各種UI(基本上都是這些UI)提供了一些幫助。 http://www.lhotka.net/cslanet/ – Andy 2011-04-28 17:02:02
感謝您的建議,我會看看它;-) – zapico 2011-04-28 20:22:34