2013-05-02 3 views
0

IsMultiSelect라는 DependencyProperty가있는 WPF 사용자 정의 컨트롤이 있습니다. UserControl xaml에 Button 숨기기를 표시하고 싶습니다.UserControl의 종속성 속성에 바인딩

<Button Visibility="{Binding IsMultiSelect, Converter=....}" /> 

이 사용자 정의 컨트롤에는 DataContext에 할당 된 ViewModel이 있습니다. 위의 구문을 사용하면 뷰 모델에없는 속성으로 인해 바인딩 오류가 발생합니다.

어떻게이 오류를 해결할 수 있습니까?

답변

2

바인딩에서 UserControl을 다른 방식으로 타겟팅 할 수 있습니다.

하나 개의 솔루션은이 같은 RelativeSource를 설정하여 그것을 발견하는 것입니다 :

<Button Visibility="{Binding IsMultiSelect, 
    RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, 
    Converter=....}" /> 
+0

이것은 내가 찾고 있었던 것입니다. 그것은 완벽하게 작동했습니다. 감사. ElementName도 사용되었습니다.

-1

종속성 속성에 대한 속성 변경 처리기는 xaml에서 속성에 바인딩하는 대신 단추의 표시 여부를 변경해야합니다.

public static readonly DependencyProperty IsMultiSelectProperty = DependencyProperty.Register("IsMultiSelect", typeof(bool), typeof(MyUserControl), new PropertyMetadata(false, OnIsMultiSelectPropertyChanged)); 

private static void OnIsMultiSelectPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) 
{ 
    (sender as MyUserControl).OnIsMultiSelectPropertyChanged(e); 
} 

private void OnIsMultiSelectPropertyChanged(DependencyPropertyChangedEventArgs e) 
{ 
    MyButton.Visibility = (bool)e.NewValue ? Visibility.Visible : Visibility.Collapsed; 
} 

public bool IsMultiSelect 
{ 
    get { return (bool)GetValue(IsMultiSelectProperty); } 
    set { SetValue(IsMultiSelectProperty, value); } 
} 

그리고 변환기 논리를 OnIsMultiSelectPropertyChanged 내부에 둘 수 있습니다.

관련 문제