Ich habe ein Itemscontrol mit einem Canvas als ItemsPanelTemplate
und mehrere DataTemplates
wie folgt aus:Itemscontrol mit mehreren Datatemplates
<ItemsControl ItemsSource="{Binding Path=DisplayObjects}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type viewModels:Object1ViewModel}">
<views:Object1UIElement/>
</DataTemplate>
<DataTemplate DataType="{x:Type viewModels:Object2ViewModel}">
<viewModels:Object2UIElement/>
</DataTemplate>
</ItemsControl.Resources >
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Left" Value="{Binding Path=X"/>
<Setter Property="Canvas.Top" Value="{Binding Path=Y"/>
<!-- Serveral more properties that are either attached to the Canvas or UIElement -->
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
Die beiden Viewmodels Lage (X, Y) auf die Leinwand links und Topeigenschaft gebunden ist. Das Problem besteht darin, dass ich die viewModels-Eigenschaften auf verschiedene Arten an Canvas binden möchte. Beispiel: Object1ViewModel
Verwenden Sie einen MultiBinding-Konverter, der einen Wert abhängig von Faktoren wie der Größe von ItemControl zurückgibt, wobei Object2ViewModel
direkt an die Canvas Left/Top-Eigenschaften wie oben gezeigt gebunden werden soll.
Ich habe versucht, die Bindung direkt in der DataTemplate zu setzen, damit ich unterschiedliche Bindungsstile für verschiedene DataTemplates haben kann, aber das funktioniert nicht .. Die Objekte werden Canvas nicht finden, wie sie in einem ContentPresenter erstellt werden.
Klingt, als ob Sie zwei verschiedene ItemContainerStyles benötigen. Sie können die ItemControl-Eigenschaft ['ItemContainerStyleSelector'] (https://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemcontainerstyleselector (v = vs.110) .aspx) auf eine entsprechende Eigenschaft setzen Stilauswahl. – Clemens
@Clemens Danke, ich habe es mit deinem Kommentar herausgefunden und meine Implementierung gepostet. – Daltons