【发布时间】:2019-04-25 01:16:56
【问题描述】:
MyProduct 是具有可以更改的 HasError 布尔属性(带有 OnPropertyChanged ...)的模型。 MyProductDialogViewModel 是:
class ProductDialogViewModel : Notifier
{
public ProductDialogViewModel() { }
public MyProduct Product { get; set; }
public bool HasError
{
get { return Product.HasError; }
}
}
我已将 MyProductDialogViewModel 实例分配给 BaseContentControl.DataContext 以扩充 ContentControl。 可以使用模板绑定为所有具有 HasError 属性的不同 ViewModel 充气。
<ContentControl x:Name="BaseContentControl" Content="{Binding}" ... >
然后我尝试直接从它的 DataContext 中提取信息。 这不起作用:
<Label Content="{Binding ElementName=BaseContentControl, Path=DataContext.HasError}"/>
但这完美无缺。
<Label Content="{Binding ElementName=BaseContentControl, Path=DataContext.Product.HasError}"/>
我认为这可能是 ViewModel 中的通知问题,因此我已更改为:
class ProductDialogViewModel : Notifier
{
public ProductDialogViewModel() { }
public MyProduct Product { get; set; }
public bool HasError
{
get { return Product.HasError; }
set
{
if (Product.HasError != value)
{
Product.HasError = value;
OnPropertyChanged("HasError");
}
}
}
}
但无济于事(实际上 set 方法从未被调用,因此它从不通知)。
我不想直接引用特定的模型实例,因为视图可以使用不同的视图模型进行膨胀。 我该怎么办?
谢谢
【问题讨论】:
-
Prouduct 类是否实现了 INotifypropertychanged 和 HasError 调用 OnPropertyChanged 事件?
-
是的,它确实实现了 INotifypropertychanged 并调用了 OnPropertyChanged("HasError")
标签: c# wpf mvvm data-binding inotifypropertychanged