Задача: UserControl, который содержит некоторый шаблон с тремя кнопками и ContentPresenter. Этот UserConrol регистрирует DependencyProperty типа Boolean с названием IsSimpleMode, от которого должно зависеть отображение кнопок: true — отображается только первая кнопка, false — отображаются только вторая и третья кнопки. Из основного окна, содержащего элемент, происходит привязка к другим свойствам элемента, таким как Visibility и Width, а также настраивается содержимое ContentPresenter. Дополнительное требование — использование MVVM.
Сначала попробовал сделать так:
— первая кнопка Visibility="{Binding Button1Visibility}", вторая — Visibility="{Binding Button2Visibility}", третья — Visibility="{Binding Button3Visibility}";
— в конструкторе: DataContext = new ViewModel(...);
— в классе ViewModel сделал три свойства: Button1Visibility, Button2Visibility и Button3Visibility, которые, в сущности, являются конвертерами значения IsSimpleMode.
Но в таком варианте не работала привязка данных к другим свойствам UserControl в том окне, в котором он был размещен:
<uc:MyUC Visibility="{Binding MyUcVisibility}" Width="{MyUcWidth}" />
потому что DataContext в конструкторе элемента установлен на совсем другой объект. Если переустановить привязку:
<uc:MyUC DataContext="{Binding}" Visibility="{Binding MyUcVisibility}" Width="{MyUcWidth}" />
то не работает привязка внутри элемента.
Была еще идея создавать экземпляр ViewModel в ресурсах элемента:
<vm:ViewModel x:Key="vm" />
а затем делать привязку к его полям, указывая полный путь к ресурсу, но это выглядит как очень громоздкое решение.
Может, есть какие-либо другие более простые способы?