WPF, Xaml и фабрика управления? - PullRequest
       2

WPF, Xaml и фабрика управления?

0 голосов
/ 25 сентября 2010

Я хотел бы создать элемент управления WPF, который состоит из нескольких других элементов управления.Основная проблема заключается в том, как реализовать правильный выбор элемента управления в зависимости от типа модели?

<MyControl>
<!-- if DataContext.GetType() == Type1 -->
<Control1 DataContext = {Binding}/>
<!-- if DataContext.GetType() == Type2 -->
<Control2 DataContext = {Binding}>

</MyControl>

Как правильно реализовать и спроектировать его?Моя идея состояла в том, чтобы поместить что-то вроде ...

Control CreateControl(object dataContext) {
 if (dataContext.GetType() == TYpe1)
     return new Control1() {DataContext = dataContext}
 if (dataContext.GetType() == TYpe2)
     return new Control2() {DataContext = dataContext}    
}

Но я не знаю, как я могу вызвать такой метод, который возвращает Control внутри XAML ...

Ответы [ 2 ]

3 голосов
/ 25 сентября 2010

Вы можете определить DataTemplates в ресурсах и использовать ContentControl в качестве заполнителя

Ресурсы:

<DataTemplate DataType="{x:Type model:Model1}">
    <Control1 />
</DataTemplate>

<DataTemplate DataType="{x:Type model:Model2}">
    <Control2 />
</DataTemplate>

(обратите внимание, что вам не нужно явно устанавливать DataContext)

Использование:

<MyControl>
    <ContentControl Content="{Binding}" />
</MyControl>

Он выберет соответствующий DataTemplate в зависимости от типа Content

1 голос
/ 25 сентября 2010

Вы можете использовать DataTemplateSelector для этого случая.

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