数据绑定具有相同用户控件wpf的两个不同对象

时间:2014-07-01 19:08:31

标签: wpf xaml binding

我有两个具有不同属性的对象,

例如

class foo
{
     int age;
     string name;
}

class bar
{
     string kind;
     int length;
}

我有一个gridview用户控件,可以很容易地将一个类绑定到它的行和列但是我不想为第二个类创建另一个用户控件,而是重复使用相同的控件来显示数据,我该怎么办这在WPF数据绑定中?

我宁愿你没有发布代码示例,只是指向我的方向,我已经看过数据模板,但他们似乎想要绑定属性,在这种情况下我有两个不同的对象。

问候

1 个答案:

答案 0 :(得分:2)

不是UserControl,也不是GridView,您可以在其中定义数据项的外观,因此您可以轻松地在一个UserControl中显示来自不同类的项目。相反,您可以通过声明DataTemplate s:

来定义每个类的呈现方式
<DataTemplate DataType="{x:Type YourPrefix:foo}">
    <StackPanel>
        <TextBlock Grid.Row="0" Text="{Binding age}" />
        <TextBlock Grid.Row="1" Text="{Binding name}" />
    </StackPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type YourPrefix:bar}">
    <StackPanel>
        <TextBlock Grid.Row="0" Text="{Binding kind}" />
        <TextBlock Grid.Row="1" Text="{Binding length}" />
    </StackPanel>
</DataTemplate>

当然,如果您希望能够在其中放置不同类型的对象,则需要使用类型object的集合:

public ObservableCollection<object> Items { get; set; }

...

Items = GetFoos();
// Or Items = GetBars();

...

<ListBox ItemsSource="{Binding Items}" />

阅读MSDN上的Data Templating Overview页面可以帮助您更好地理解这一点。但是,我不建议使用这种方法,因为您不得不将对象强制转换为正确的类型。对于要显示或编辑的每种数据类型,声明不同的UserControl更好。