[WPF] UserControl и MVVM
От: vers  
Дата: 02.04.11 12:24
Оценка:
Задача: 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" />
а затем делать привязку к его полям, указывая полный путь к ресурсу, но это выглядит как очень громоздкое решение.

Может, есть какие-либо другие более простые способы?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.