2009-11-02 5 views
2

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

например: Имя: Билл, Управление: TextBox Имя: Боб, Управление: ComboBox Имя: Dan, управление: 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> 

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

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

<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

ответ

1

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

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

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

+0

Я пытался заставить это работать, но я скоро приду. Я ожидал, что ниже будет показано текстовое поле: public class Person { public string Имя {get; задавать; } public TextBox ControlType = new TextBox() {Text = "test"}; } .

+0

Извините, утерянное форматирование! Может повторно отправить, если это поможет? –

+0

@Dan, в вашем классе образцов, я бы постарался сделать ControlType «полным» C#, а не публичным. – mackenir

1

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

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

Это просто делают то, что вы даете ему. Если свойство «Контроль» Person является элементом управления WPF, оно это сделает.

Смежные вопросы