当自定义UserControl的目标DependencyProperty更改时,我得到的绑定源不会更新。在自定义用户控件中使用DependencyProperty更新源代码
源代码是一个加载了MEF的ViewModel到我的自定义UserControl的DataContext中。
我的结合看起来像这样的的MyUserControl
// MyUserControl.xaml
<MyUserControlBase x:Class="MyUserControl" MyDependencyProperty="{Binding ViewModelProperty}">
如果我使用MyDependencyProperty与FrameworkPropertyMetadata和使用回调函数,当属性的变化,我可以做哪些工作正常,以下根XAML
// MyUserControlBase.cs
private static void MyDependencyProperty_Changed(DependencyObject depObj, DependencyPropertyChangedEventArgs args)
{
var filter = (UserControl)depObj;
var vm = (ViewModel)filter.DataContext;
vm.ViewModelProperty= (VMPropType)args.NewValue;
}
在继承UserControl的MyUserControlBase中注册DependencyProperty。
// MyUserControlBase.cs
public static readonly DependencyProperty MyDependencyPropertyProperty = DependencyProperty.Register("MyDependencyProperty",
typeof(VMPropType),
typeof(MyUserControlBase),
new FrameworkPropertyMetadata(null, MyDependencyProperty_Changed));
但是为什么我不能在XAML中完成简单的双向绑定工作?
输出窗口显示没有绑定失败。我可以看到正在调用ViewModel.ViewModelProperty getter。一旦MyDependencyProperty发生变化,就不要使用setter。
它似乎不是事件顺序的问题。 ViewModel在DependencyProperty第一次被改变之前就已经创建好了。
我也看过Setting up binding to a custom DependencyProperty inside a WPF user control 但他的问题似乎稍有不同,因为我actualy从我自己的基类持有DependencyProperty继承。
谢谢你的帮助。
编辑:链接到示例解决方案。 Solution zip here
对不起,可怕的链接,我不知道很多快速fileshareing网站。如果它的坏评论,我会尽快删除它,但它似乎确定。
请在注册依赖项属性的位置填写代码。 – Jefim 2012-07-23 12:48:40