2010-08-22 102 views
1

我正在WPF項目上工作。我創建了一個包含組合框的用戶控件;它們表示布爾值(True或False)。我爲我的用戶控件註冊一個DependencyPropertyValueWPF DependencyProperty和數據綁定

每當組合框選擇被更改,我將更新Value屬性,並且當Value屬性更新時,我將更新組合框。

但我在MVVM中使用我的usercontrol時發現了這個問題。我將Value屬性與我的viewModel中的IsEnable屬性綁定。我將綁定模式設置爲TwoWay綁定。但是當我改變組合框中的選擇時,IsEnable屬性從未設置。

我的用戶:

public bool Value 
{ 
    get { return (bool)GetValue(ValueProperty); } 
    set { SetValue(ValueProperty, value); } 
} 

public static readonly DependencyProperty ValueProperty = 
     DependencyProperty.Register("Value", typeof(bool), 
     typeof(BooleanComboBox), 
     new UIPropertyMetadata(true, OnValuePropertyChanged)); 

private void Cmb_Selection_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    ComboBox cmb = sender as ComboBox; 
    object selectedValue = cmb.SelectedValue; 
    if (selectedValue == null) 
    { 
     this.Value = false; 
    } 
    else 
    { 
     if (selectedValue.GetType() == typeof(bool)) 
     { 
      this.Value = (bool)selectedValue; 
     } 
     else 
     { 
      this.Value = false; 
     } 
    } 

    if (this.OnValueChange != null) 
     this.OnValueChange(this, this.Value); 
} 

private static void OnValuePropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs args) 
{ 
    BooleanComboBox self = sender as BooleanComboBox; 
    self.Cmb_Selection.SelectedValue = (bool)args.NewValue; 
} 

在窗口,在這裏我把我的用戶(我已經設置UserControl的DataContext的,以我的視圖模型):

<tibsExtControl:BooleanComboBox Grid.Row="4" 
           Grid.Column="1" 
           VerticalAlignment="Center" 
           Value="{Binding Path=NewTemporaryZone.IsEnable, 
               Mode=TwoWay, 
               UpdateSourceTrigger=PropertyChanged}" 
           x:Name="Cmb_AllowNonLBILogon"/> 

在我的模型類,我宣佈一個IsEnable屬性:

private bool _isEnable; 
public bool IsEnable 
{ 
    get { return _isEnable; } 
    set 
    { 
     _isEnable= value; 
     OnPropertyChanged("IsEnable"); 
    } 
} 

這是怎麼回事與我的用戶控件。我想念什麼?請幫幫我。 T.T

回答

0

請檢查您在VS的輸出窗口中是否有任何綁定錯誤。

0

嘗試刷新您的綁定Cmb_Selection_SelectionChanged。例如:

BindingExpression b = cmb.GetBindingExpression(MyNamespace.ValueProperty); 
b.UpdateSource(); 
0

我有過同樣的問題;與布爾依賴項屬性!嘗試將bool切換爲INullable<bool>bool?)並應用適當的類型轉換。這對我有效。不知道這是一個bug還是在創建依賴項屬性時處理值類型與引用類型相比有所不同?也許別人可以證實這一點。