0

コレクションビューモデルにDataGridバインドしています。要素ビューモデルには、タイプがUIと呼ばれるプロパティがありますUIElementUIElementシナリオは、生成されたものをバインドしたいというものです。

たとえば(架空のおもちゃの例)、テキストがFooのUIElementaであるとすると、テキストFooの'の行が必要になります。TextBlockDataGridTextBlock

これが欲しい理由はここでは重要ではありません。

では、データバインドされたコンテンツとしてが挿入されるタイプUIElementのプロパティにデータバインドするにはどうすればよいでしょうか。UIElement

4

1 に答える 1

1

まあ、あなたは先に進んでそれを行うことができると思います。

この小さなコードは、私が信じていることをほとんど実行します..

XAML:

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

分離コード:

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;
        }
    }
}
于 2012-11-07T20:47:09.720 に答える