WPF ListBox, показывающий свойство объекта с использованием DataTemplate - PullRequest
0 голосов
/ 09 июня 2018

У меня есть две реализации интерфейса, которые обернуты в другой класс.Это выглядит так:

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 голосов
/ 09 июня 2018

вы можете определить (в ItemsControl Resources) DataTemplate для каждого типа.ContentControl в ItemTemplate должен выбрать правильный шаблон.

<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>
...