WPF: шаблон переключения на основе данных UserControl - PullRequest
0 голосов
/ 04 июня 2009

Попытка реализовать то, что я думал, была простой концепцией. У меня есть пользовательский элемент управления (представление), связанный с моделью представления, которая предоставляет список данных. Я добавил кнопки управления в usercontrol и хотел бы позволить пользователю использовать эти кнопки для переключения, какой шаблон используется для отображения данных. Все шаблоны, используемые для данных, работают, и они сильно отличаются друг от друга, так что это не просто изменения одного шаблона. Я хотел бы получить это как можно больше в XAML.

Вот что у меня сейчас:

Где появляются данные, у меня есть <UserControl Template="{StaticResource ListSwitchingControlTemplate}" />

В этом шаблоне управления у меня есть все «суб-шаблоны» - на самом деле это всего лишь 3 представления с их видимостью, установленной на Collapsed. Затем я использую триггер данных в этом шаблоне управления, чтобы показать текущий выбранный вид. Это работает, но я заметил, что все 3 представления связаны друг с другом - каждое из них действует так, как будто они активны (и я думаю, что они активны).

Я бы предпочел по-настоящему переключать шаблон во время выполнения. Я попытался преобразовать содержащий пользовательский элемент управления, чтобы использовать ContentTemplate для себя, но это только портит все привязки, которые у меня есть в другом месте. Если бы только UserControls мог использовать DataTriggers, я был бы в порядке.

Любые предложения о том, как правильно подобрать такое поведение. У меня есть идея, что мне просто не хватает чего-то простого.

Спасибо, Dave

Ответы [ 2 ]

1 голос
/ 05 июня 2009

Один из способов сделать это - использовать DataTemplateSelector.

По сути, вы создаете класс, который наследуется от DataTemplateSelector, и переопределяете его виртуальную функцию SelectTemplate. Возвращаемое значение из функции - это DataTemplate, который вы хотите использовать, и в этой функции у вас есть доступ к объекту и его свойствам, которые вы можете использовать, чтобы решить, какой шаблон выбрать.

Вот пример на MSDN здесь:

http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...