2012-11-07 1 views
0

J'ai un DataGrid lié à un modèle de vue de collection. Le modèle de vue d'élément possède une propriété appelée interface utilisateur de type UIElement. Le scénario est que je veux que le UIElement généré soit lié.Liaison de données où les données sont de type UIElement

Ainsi, par exemple (exemple de jouet imaginaire), disent que le UIElement est un TextBlock avec un texte Foo, alors je veux le DataGrid d'avoir des lignes de TextBlock « s avec le texte Foo.

La raison pour laquelle je veux ceci n'est pas importante ici.

Alors comment peut-on lier une base de données à une propriété de type UIElement où le UIElement est injecté comme contenu de base de données?

Répondre

1

Eh bien, vous pouvez simplement aller de l'avant et le faire, je suppose.

Ce petit morceau de code fait à peu près ce que vous voulez que je crois ..

XAML:

<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False"> 
    <DataGrid.Columns> 
     <DataGridTemplateColumn> 
      <DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <ContentControl Content="{Binding UI}" /> 
       </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
    </DataGrid.Columns> 
</DataGrid> 

code-behind:

public partial class MainWindow : Window 
{ 
    public List<Model> Items { get; set; } 

    public MainWindow() 
    { 
     InitializeComponent(); 

     var textblock = new TextBlock(); 
     textblock.Text = "I'm a textblock"; 

     var button = new Button(); 
     button.Content = "I'm a button"; 

     var combobox = new ComboBox(); 
     combobox.Items.Add("Item1"); 
     combobox.Items.Add("Item2"); 

     this.Items = new List<Model>(new[] { 
      new Model(textblock), 
      new Model(button), 
      new Model(combobox) 
     }); 

     this.DataContext = this;  
    } 

    public class Model 
    { 
     public UIElement UI { get; set; } 

     public Model(UIElement ui) 
     { 
      this.UI = ui; 
     } 
    } 
} 
+0

réponse parfaite! Merci un million. :-) –

Questions connexes