2010-08-22 4 views
1

WPF 프로젝트에서 작업 중입니다. 나는 combobox를 포함하는 usercontrol을 만든다; 부울 값 (True 또는 False)을 나타내는 그리고 내 usercontrol에 DependencyPropertyValue을 등록합니다.WPF DependencyProperty 및 데이터 바인딩

콤보 박스 선택이 변경 될 때마다 Value 속성을 업데이트하고 Value 속성이 업데이트 될 때마다 콤보 상자를 업데이트합니다.

하지만 MVVM에서 내 usercontrol을 사용할 때 문제가 발견되었습니다. 내속성을 내 012Model 내 IsEnable 속성으로 바인딩합니다. 바인딩 모드를 TwoWay 바인딩으로 설정했습니다. 그러나 comboBox에서 선택을 변경하면 IsEnable 속성이 설정되지 않습니다.

내 UserControl을 : 내 UserControl을 배치 창에서

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을의 데이터 컨텍스트를 설정) : 내가 IsEnable 속성을 선언 내 모델 클래스에서

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

:

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

내 usercontrol에는 어떤 현상이 발생합니까? 나는 무엇인가 놓친다? 도와주세요. T.T

답변

0

VS의 출력 창에 바인딩 오류가 있는지 확인하십시오.

0

Cmb_Selection_SelectionChanged에서 바인딩을 새로 고침 해보세요. 비슷한 :

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

나는 동일한 문제가 있었다; 부울 종속성 속성! boolINullable<bool> (bool?)으로 전환하고 적절한 유형 변환을 적용하십시오. 이것은 나를 위해 일했다. 이것이 버그인지 또는 종속성 속성을 만들 때 값 유형이 참조 유형과 다소 다르게 처리되는지 여부를 모릅니다. 어쩌면 다른 누군가가 그것을 확인할 수 있습니다.