2013-05-02 5 views
0

У меня есть пользовательский элемент управления WPF, у которого есть DependencyProperty, называемый IsMultiSelect. Я хочу показать скрыть кнопку в xaml UserControl.Связывание с зависимым свойством UserControl

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

Этот пользовательский элемент управления имеет ViewModel, назначенный DataContext. Вышеупомянутый синтаксис дает мне ошибку привязки из-за свойства, не существующего в модели представления.

Как исправить эту ошибку?

ответ

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, а также.

Смежные вопросы