请查看以下代码
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
{
// ...
}
}
现在IsValid
- VM1
的属性取决于IsValid
- VM2
属性的值。实现这一目标的最佳方法是什么?
我找到了解决问题的方法。 VM1类订阅VM2的propertychanged事件。 并更改VM2的whenevr ISValid属性,在此事件处理程序中,我们调用setState() VM1的方法来决定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;
}
}
这是正确的方法吗?
答案 0 :(得分:0)
我需要了解有关您如何考虑VM2
的{{1}}财产的更多信息。
您可以将IsValid
的实例传递到VM2
的构造函数中,以便可以引用它。请看下面的例子。
VM1
答案 1 :(得分:0)
如果VM1
仅在VM2
有效的情况下有效,请使用&&
- 运算符返回IsValid
- 属性的常见结果:
public class VM1
{
// ...
public bool IsValid
{
get
{
return isValid &&
(VMInstance != null && VMInstance.IsValid);
}
set
{
isValid = value;
}
}
// ...
}
因此VM1.IsValid
只有true
(私有字段)和VM1.isValid
才会返回VM2.IsValid
true
返回VM1.IsValid
。
由您自行决定true
是否会返回false
或VMInstance
,具体取决于null
是否为IsValid
- 只需调整声明相应
然后setter只设置当前实例的值,因为它不会影响第二个视图模型的{{1}} - 属性。