2015-10-19 25 views
1

我有一个简单的用户控件(DoubleRadioControl2),由2个单选按钮组成。我对这个UC一德普道具:(布尔?)IsOuiChecked:WPF:MvvmLight,Usercontrol,Binding

  • 真实的 - '是' 无线电检查
  • 假的 - '不' 无线电检查
  • 空 - 无论 收音机选中

很简单。

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; 
     } 
    } 
} 

而且部份之间的逻辑2个收音机:

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); 
     } 
    } 

双向绑定不工作。

+0

除了下面的答案,如果你想保持绑定的依赖项属性不变,你也应该使用'SetCurrentValue',而不是'SetValue'。 –

回答

3

的getter和setter您的依赖属性只存在(程序员)的便利。 WPF本身不会调用它们,但直接设置属性。

您需要将处理程序附加到属性的已更改事件。使用FrameworkPropertyMetadata构造函数之一,其构造函数采用PropertyChangedCallback。你的getter和setter逻辑需要在那里处理,而不是在属性中。

+0

不知道,谢谢。 – Sicha

1

如果您使用的MVVM,你应该调用OnPropertyChanged

0

首先这是一个非常实用的方法,将代码放入依赖项属性的Get/Set部分中,查看这些Exanples以获得解决方案。如果您有关于DP更改的逻辑,则必须将该登录名放入回调中。

  1. 依赖属性解释here
  2. MSDN Overview here

如果在View/Viewmodel级别定义了绑定,则必须在Viewmodel一侧使用INotifyPropertyChange事件来通知View绑定的属性已更改。

问候,

+0

感谢您的建议,使sens。 – Sicha

+0

@不客气! – Ilan