[英]WPF : MvvmLight, Usercontrol, Binding
我有一個簡單的用戶控件(DoubleRadioControl2),由2個單選按鈕組成。 我在這個UC上有一個Dep Prop:(bool?)IsOuiChecked:
很簡單
private static readonly DependencyProperty IsOuiCheckedProperty = DependencyProperty.Register("IsOuiChecked", typeof(bool?), typeof(DoubleRadioControl2), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));
public bool? IsOuiChecked
{
get
{
return (bool)GetValue(IsOuiCheckedProperty);
}
set
{
SetValue(IsOuiCheckedProperty, value);
if (value == null)
{
RadioYes.IsChecked = false;
RadioNo.IsChecked = false;
}
else
{
RadioYes.IsChecked = (bool) value;
RadioNo.IsChecked = !(bool) value;
}
}
}
和這兩個收音機之間的邏輯:
private void OptDecompteConfnOui_Click(object sender, RoutedEventArgs e)
{
IsOuiChecked = true;
}
private void OptDecompteConfnNon_Click(object sender, RoutedEventArgs e)
{
IsOuiChecked = false;
}
當我將此UC綁定到我的視圖模型時,如果在單擊收音機時更新了道具,則該道具也會綁定。 但是,當我在視圖模型的代碼中設置值時,它不會更新我的收音機。
在我的視圖模型中:
private bool? _isDRB2OuiChecked;
public bool? IsDRB2OuiChecked
{
get
{
return _isDRB2OuiChecked;
}
set
{
if (_isDRB2OuiChecked == value)
{
return;
}
_isDRB2OuiChecked = value;
RaisePropertyChanged(() => IsDRB2OuiChecked);
}
}
TwoWay綁定不起作用。
為您的依賴項屬性的getter和setter方法只存在於你 (程序員)的便利。 WPF本身不會調用它們,而是直接設置屬性。
您需要將處理程序附加到屬性的已更改事件。 使用FrameworkPropertyMetadata
構造函數之一,該構造函數采用PropertyChangedCallback 。 您的getter和setter邏輯需要在此處而不是在屬性內進行處理。
如果您使用的是MVVM,則應致電OnPropertyChanged
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.