2015-10-19 57 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