我有一个presentationmodel(viewmodel),其中包含一个注册如下的依赖属性。
public Field SelectedField
{
get { return (Field)GetValue(SelectedFieldProperty); }
set
{
SetValue(SelectedFieldProperty, value);
}
}
public static readonly DependencyProperty SelectedFieldProperty =
DependencyProperty.Register("SelectedField", typeof(Field), typeof(PresentationModel), new PropertyMetadata(new PropertyChangedEventHandler(onPropertyChangedSelectedField)));
private static void onPropertyChangedSelectedField(object sender, PropertyChangedEventArgs e)
{
throw new NotImplementedException();
}
我正在从下面的控制器解析视图..
IPresentationModel presenter = this.Container.Resolve<IPresentationModel>();
在尝试时,我收到错误提示 - 在发生异常时:调用构造函数PresentationModel,在挖掘时,我注意到错误发生在下面的行中..
public static readonly DependencyProperty SelectedFieldProperty =
DependencyProperty.Register("SelectedField", typeof(Field), typeof(PresentationModel), new PropertyMetadata(new PropertyChangedEventHandler(onPropertyChangedSelectedField)));
我在propertymeta数据中提到错误是由PropertyChangedEventHandler和DependencyPropertyChangedEventHandler引起的。但是,对于PropertyChangedCallBack,我没有遇到任何错误,并且视图加载正常。这会是什么问题..
答案 0 :(得分:1)
通过查看MSDN文档,似乎PropertyChangedCallback和PropertyChangedEventHandler用于不同的事情。
根据文档, PropertyChangedCallback 是我认为您正在寻找的:
“表示当依赖项属性的有效属性值发生更改时调用的回调。”
至于 PropertyChangedEventHandler ,文档说:
“表示在组件上更改属性时将处理 PropertyChanged 事件引发(来自INotifyPropertyChanged接口)的方法。”
这似乎提示该委托用于通知公共属性的更改,例如视图在其视图模型中绑定到属性时。因此,这两个委托似乎不是“可交换的”(它们甚至在不同的名称空间中定义。)