WPF - тип динамического управления привязкой данных

2

У меня есть класс Person. У человека может быть связанный контроль. Могу ли я отображать управление посредством привязки данных?

например: Name: Bill, Control: TextBox    Имя: Bob, Control: ComboBox    Имя: Dan, Control: CheckBox

У меня есть следующий xaml в моем ресурсном словаре

<DataTemplate x:Key="PersonTemplate">
        <DockPanel >
            <TextBlock FontWeight="Bold" Text="Name: " DockPanel.Dock="Left" Margin="5,0,10,0"/>
            <TextBlock Text="{Binding FirstName}" Foreground="Green" FontWeight="Bold" />
       </DockPanel>
</DataTemplate>

Я хотел бы добавить связанный пользовательский элемент управления в док-панель, можно ли это сделать

Что-то вроде??

<DataTemplate x:Key="PersonTemplate">
        <DockPanel >
            <TextBlock FontWeight="Bold" Text="Name: " DockPanel.Dock="Left" Margin="5,0,10,0"/>
            <TextBlock Text="{Binding FirstName}" Foreground="Green" FontWeight="Bold" />
            <Control Type = "{Binding Control}"/>
       </DockPanel>
</DataTemplate>

Спасибо Dan

Теги:
xaml
wpf
data-binding
controls

2 ответа

1
Лучший ответ

Это работает для меня, по крайней мере изначально:

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

NB: если ваш пользовательский интерфейс связывается с этим свойством более чем в одном месте, вы можете получить исключение из-за попытки родительского элемента управления в нескольких местах.

  • 0
    Я пытался заставить это работать, но я терплю неудачу. Я ожидаю, что ниже будет показано текстовое поле: public class Person {public string Name {get; установлен; } public TextBox ControlType = new TextBox () {Text = "test"}; } <DataTemplate x: Key = "PersonTemplate"> <DockPanel> <TextBlock FontWeight = "Bold" Text = "Имя:" DockPanel.Dock = "Left" Margin = "5,0,10,0" /> <TextBlock Text = "{Binding Name}" Foreground = "Green" FontWeight = "Bold" /> <ContentControl Content = "{Binding ControlType}" /> </ DockPanel> </ DataTemplate>
  • 0
    Извините, потерял форматирование! Могу ли переиздать, если это поможет ??
Показать ещё 4 комментария
1

Я думаю, вы могли бы использовать ContentControl в этом случае:

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

Это просто сделает все, что вы ему дадите. Если свойство Person "Control" является элементом управления WPF, оно отображает это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню