ViewModel如何驱动ControlTemplate?

时间:2010-02-23 20:19:38

标签: wpf viewmodel controltemplate

我遇到的问题是,TreeView Controltemplate的某些部分需要根据绑定(ItemsSource)ViewModel的状态进行更改。例如,小扩展器图标需要基于每个项目ViewModel状态与不同的绘图交换。另外,根据每个ViewModel的状态,子项需要水平排列而不是垂直排列。

1 个答案:

答案 0 :(得分:1)

听起来你必须自定义ItemsContainerStyle,而不是自定义ControlTemplate。例如,如果要在选择基础ViewModel时将TreeViewItem标记为已选中,则可以使用以下样式:

<TreeView ItemsSource="{Binding ...}
          ...>
 <TreeView.ItemContainerStyle>
   <Style TargetType="{x:Type TreeViewItem}">
     <!-- IsSelected is a property on ViewModel item -->
     <Setter Property="IsSelected" Value="{Binding IsSelected}"/>
     <Setter .../>
   </Style>
 </TreeView.ItemContainerStyle>
</TreeView>

如果Binding不适合您,您可以在Style或ControlTemplate中使用ConvertersTriggers。此外,您还可以在DataTemplates中使用触发器。

PS:从头开始编写代码。可能有拼写错误。