我有一个WPF项目(C#,Visual 2010,MVVM),我有一个问题。
目前,我在ListBox中有一个项目模板。这看起来如下:
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Thumb Name="myThumb" Template="{StaticResource NodeVisualTemplate}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="DragDelta">
<cmd:EventToCommand Command="{Binding ChatNodeListViewModel.DragDeltaCommand, Source={StaticResource Locator}}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Thumb>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>模板是“NodeVisualTemplate”,它是一系列控件(如边框和文本框)。
我不知道该如何做,也不知道我想做什么,就是能够根据该项中的属性将该模板替换为另一个模板。在ListBox中,每个ListBoxItem都有一个数据上下文,即“ChatNodeViewModel”。我希望在其中有一个属性来决定使用哪个模板。
这个是可能的吗?如果是的话,如何才能做到呢?
发布于 2017-09-06 12:36:25
您可以像这样使用<DataTemplate.Triggers>:
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Thumb Name="myThumb" Template="{StaticResource NodeVisualTemplate}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="DragDelta">
<cmd:EventToCommand Command="{Binding ChatNodeListViewModel.DragDeltaCommand, Source={StaticResource Locator}}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Thumb>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding YourProperty}" Value="1">
<Setter TargetName="myThumb" Property="Template" Value="{StaticResource NodeVisualTemplateOne}" />
</DataTrigger>
<DataTrigger Binding="{Binding YourProperty}" Value="2">
<Setter TargetName="myThumb" Property="Template" Value="{StaticResource NodeVisualTemplateTwo}" />
</DataTrigger>
<DataTrigger Binding="{Binding YourProperty}" Value="3">
<Setter TargetName="myThumb" Property="Template" Value="{StaticResource NodeVisualTemplateThree}" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>https://stackoverflow.com/questions/46074428
复制相似问题