當自定義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