【问题标题】:data binding two different objects with same user control wpf数据绑定两个不同的对象与相同的用户控件wpf
【发布时间】:2014-07-01 19:08:30
【问题描述】:

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

例如

class foo
{
     int age;
     string name;
}

class bar
{
     string kind;
     int length;
}

我有一个 gridview 用户控件,可以轻松地将一个类绑定到它的行和列,但我不想只为第二个类制作另一个用户控件,我宁愿重用相同的控件来显示数据,我该怎么做这在 WPF 数据绑定中?

我宁愿你没有发布代码示例,只是为我指明方向,我查看了数据模板,但他们似乎希望属性绑定到,在这种情况下我有两个不同的对象。

问候

【问题讨论】:

    标签: wpf xaml binding


    【解决方案1】:

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

    <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 页面应该可以帮助您更好地理解这一切。但是,我不推荐这种方法,因为您必须不断地将对象转换回正确的类型。您最好为正在显示或编辑的每种数据类型声明不同的 UserControls。

    【讨论】:

      猜你喜欢
      • 2021-08-10
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 2019-09-09
      • 1970-01-01
      相关资源
      最近更新 更多