請看看下面的代碼二傳手是取決於所含ViewModel類的其他財產
public class VM1
{
private bool isValid;
private VM2 vmInstance;
// ...
public bool IsValid
{
get { return this.isValid; }
set { /* ... */ }
}
public VM2 VMInstance
{
// ...
}
}
public class VM2
{
public bool IsValid
{
// ...
}
}
現在的VM1
的IsValid
- 屬性取決於IsValid
的價值 - 性質VM2
。什麼是實現這一目標的最佳方式?
我找到了解決我的問題的方法。 VM1類訂閱VM2的propertychanged事件。我們調用VM1的setState() 方法來決定IsValid屬性的值。
void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case "IsValid":
// call a method in VM1 to decide the value of IsValid property of VM1
// say, the method name is setState()
break;
}
}
這是正確的方法嗎?
當你說「VM1依賴於VM2的IsValid屬性值」時,你的意思是類似'return isValid && vmInstance!= null && vmInstance.IsValid;'? – Clemens 2013-02-12 14:58:03
你有沒有想過在VM1中公開你的VM2 IsValid屬性,只是創建一個getter:'public bool IsValid {get return vmInstance.IsValid; }' – 2013-02-12 14:58:03
其實VM2的IsValid屬性依賴於VM2的各種其他屬性。並且VM1的IsValid屬性依賴於VM1的另外兩個屬性(比如Prop1,Prop2)以及VM2的IsValid屬性的值。只有當Prop1(類型爲字符串)不爲空且Prop2(類型爲int)大於18且VM2的IsValid屬性爲true時,VM1的ISValid屬性才爲true。 – 2013-02-13 05:43:12