Here is what I am trying to do. I have 2 Data Templates defined which both refer to a different user control.
<UserControl.Resources> <DataTemplate x:Key="myDataTemplate1"> <Border BorderBrush="Black" BorderThickness="1"> <myUserControl1 /> </Border> </DataTemplate> <DataTemplate x:Key="myDataTemplate2"> <Border BorderBrush="Black" BorderThickness="1"> <myUserControl2/> </Border> </DataTemplate> </UserControl.Resources> I am using these Data Templates to display a list of items using ItemsControl like this:
<ItemsControl x:Name="myItemList" ItemTemplate="{StaticResource myDataTemplate1}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate /> </ItemsControl.ItemsPanel> </ItemsControl> I would like the ItemTemplate to conditionally be either myDataTemplate1 or myDataTemplate1 depending on the value of an integer variable being 1 or 2 respectively.
Should I use DataTriggers for this or is there another way to do this? Appreciate the help.
A data template can contain elements that are each bound to a data property along with additional markup that describes layout, color and other appearance. DataTemplate is, basically, used to specify the appearance of data displayed by a control not the appearance of the control itself.
According to Microsofts App Studio the DataTemplates should live in a DataTemplates Subdirectory under the Views Directory.
You use the ItemTemplate to specify the visualization of the data objects. If your ItemsControl is bound to a collection object and you do not provide specific display instructions using a DataTemplate, the resulting UI of each item is a string representation of each object in the underlying collection.
Don't set the ItemTemplate but use an ItemTemplateSelector.
DataTriggers would be fine too of course, spares you the extra class for the selector. e.g.
<ItemsControl.ItemTemplate> <DataTemplate> <ContentControl Content="{Binding}"> <ContentControl.Style> <Style TargetType="ContentControl"> <Style.Triggers> <DataTrigger Binding="{Binding ThatProperty}" Value="1"> <Setter Property="ContentTemplate" Value="{StaticResource myDataTemplate1}" /> </DataTrigger> <DataTrigger Binding="{Binding ThatProperty}" Value="2"> <Setter Property="ContentTemplate" Value="{StaticResource myDataTemplate2}" /> </DataTrigger> </Style.Triggers> </Style> </ContentControl.Style> </ContentControl> </DataTemplate> </ItemsControl.ItemTemplate>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With