WPF ListBox使用DataTemplate显示对象属性

时间:2018-06-09 14:00:14

标签: c# wpf data-binding listbox datatemplate

我有两个接口的实现,它包含在另一个类中。它看起来像这样:

public interface IMyInterface{
    string someProperty
}

public class MyClass1 : IMyInterface{
    string someProperty
}
public class MyClass2 : IMyInterface{
     string someProperty
}

   public class Wrapper{
       public IMyInterface MyObject {get;}

       public Wrapper(IMyInterface imi){
           MyObject = imi;
       }

       public bool SomeOtherProperty {get; }
   }

现在我有一个ObservableCollection<Wrapper> Wrappers,我将在ItemSource中使用ListBox。但我想根据DataTemplate的类型创建Wrapper.MyObject。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:2)

您可以为每种类型定义(在ItemsControl Resources中)DataTemplate。 ItemTemplate中的ContentControl应该选择正确的模板。

<ItemsControl ItemsSource="{Binding Wrappers}">
    <ItemsControl.Resources>
        <DataTemplate DataType="{x:Type vm:MyClass1}">

        </DataTemplate>

        <DataTemplate DataType="{x:Type vm:MyClass2}">

        </DataTemplate>                    
    </ItemsControl.Resources>

    <ItemsControl.ItemTemplate>
        <DataTemplate>
             <ContentControl Content="{Binding MyObject}"/>
        </DataTemplate> 
    </ItemsControl.ItemTemplate>
</ItemsControl>