Ich habe die folgenden Arten erklärt:eine Datenvorlage Auswahl basierend auf Typ
public interface ITest { }
public class ClassOne : ITest { }
public class ClassTwo : ITest { }
In meinem Viewmodel Ich erkläre und Initialisieren der Kollektion:
public class ViewModel
{
public ObservableCollection<ITest> Coll { get; set; } = new ObservableCollection<ITest>
{
new ClassOne(),
new ClassTwo()
};
}
Meiner Ansicht I‘ m erklärt die folgenden ItemsControl
<ItemsControl ItemsSource="{Binding Coll}">
<ItemsControl.Resources>
<DataTemplate DataType="local:ClassOne">
<Rectangle Width="50" Height="50" Fill="Red" />
</DataTemplate>
<DataTemplate DataType="local:ClassTwo">
<Rectangle Width="50" Height="50" Fill="Blue" />
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
Was ich erwarte, ist ein rotes Quadrat mit einem blu gefolgt, um zu sehen e Platz statt, was ich sehe, ist die folgende:
Was mache ich falsch?
Ich glaube, Sie wollen tatsächlich [Datatemplateselector] (https://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector%28v=vs.110%29.aspx) –
@ChrisW. Direkt von diesem Link: _ "... Erstellen Sie einen DataTemplateSelector, wenn Sie mehr als ein DataTemplate für denselben Objekttyp haben und Sie möchten eine eigene Logik bereitstellen, um eine DataTemplate auszuwählen, die basierend auf den Eigenschaften jedes Datenobjekts angewendet wird. * * Beachten Sie, dass Sie, wenn Sie Objekte unterschiedlicher Typen haben, die DataType-Eigenschaft auf der DataTemplate ** festlegen können. "_ – kskyriacou
Entschuldigung, ich dachte [ItemTemplateSelector] (https://msdn.microsoft.com/en-us/library/ system.windows.controls.itemscontrol.itemtemplateSelector% 28v = vs.110% 29.aspx), ich sollte sowieso nicht hier sein, erster schöner Tag seit dem Winter und meine Gedanken sind woanders, ich denke nicht einmal ich schaute tatsächlich auf die ganze Frage lol. Frühlingsgefühle, Prost. –