我創建一個用戶控件有一個DependencyProperty但DependencyProperty的是沒有得到調用者的傳入值。自定義依賴屬性不獲取綁定輸入
我發現在我自己以下調查
如果我使用內置的用戶控件,如TextBlock,一切正常。這將問題縮小到我的UserControl的實現(而不是調用UserControl的代碼)
我的屬性更改了回調函數,我註冊的函數甚至沒有被調用(好吧...至少該斷點不是被擊中)
如果當我用的結合提供了依賴屬性只看到這個問題,所以這不起作用:
<common:MyUserControl MyDP="{Binding MyValue}"/>
,但我沒有問題,如果我擺脫綁定和硬編碼的值,所以這個工程:
<common:MyUserControl MyDP="hardCodedValue"/>
這裏的背後我的用戶代碼:
public partial class MyUserControl : UserControl
{
public string MyDP
{
get { return (string)GetValue(MyDPProperty); }
set { SetValue(MyDPProperty, value); }
}
public static readonly DependencyProperty MyDPProperty =
DependencyProperty.Register(
"MyDP",
typeof(string),
typeof(MyUserControl),
new FrameworkPropertyMetadata(
"this is the default value",
new PropertyChangedCallback(MyUserControl.MyDPPropertyChanged)));
public static void MyDPPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
((MyUserControl)obj).MyDP = (string)e.NewValue;
}
public MyUserControl()
{
InitializeComponent();
this.DataContext = this;
}
}
而這裏的XAML
<Grid>
<TextBlock Text="{Binding MyDP}"/>
</Grid>
由於我能夠使用內置的用戶控件,如TextBlock的,我不認爲錯誤在於我的主機代碼,但在這裏它,只是讓你有一個完整的畫面:
<StackPanel>
<common:MyUserControl MyDP="{Binding MyValue}"/>
</StackPanel>
public class MainWindowViewModel
{
public string MyValue { get { return "this is the real value."; } }
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel();
}
}
刪除該行看起來像它幫助!我的MyDPPropertyChanged方法最終被調用,並且具有正確的數據綁定值。謝謝,這讓我更接近了。 雖然我仍然有問題 - 用戶界面似乎沒有得到更新的新值。有任何想法嗎?我嘗試了AffectsRender = true,但那似乎不起作用。 – 2013-04-23 05:30:33
我也嘗試刪除回調,因爲你建議,並沒有區別。 – 2013-04-23 05:38:49
@vivekmaharajh我需要看到一些XAML的UserControl來幫助這方面。 – Jay 2013-04-23 13:15:27