数据绑定,其中数据类型为UIElement

时间:2012-11-07 20:18:24

标签: wpf data-binding virtualization uielement

我有DataGrid绑定到集合视图模型。元素视图模型具有名为UI UIElement的属性。方案是我希望生成的UIElement被绑定。

例如(想象中的玩具示例),假设UIElement是带有文本Foo的TextBlock,那么我希望DataGrid包含TextBlock行带有文字Foo。

我想要这个的原因在这里并不重要。

那么如何将一个数据绑定到UIElement类型的属性,其中UIElement被注入为数据绑定内容?

1 个答案:

答案 0 :(得分: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;
        }
    }
}