0

我有个问题。我为 a 做了DataTemplate一个TreeView,我需要根据我的模型设置ToggleButton'属性的初始值。IsChecked但事实证明,使用触发器/设置器设置此属性会禁用数据绑定。

是这样吗?如果是的话,给我一个建议如何解决?

<DataTemplate x:Key="CellTemplate_Name">
   <DockPanel x:Name="dock">
      <ToggleButton x:Name="Expander"
        IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource AncestorType={x:Type TreeViewItem}}}"> <--- Binding
    ...
      <ToggleButton/>
    ...
   <DataTemplate.Triggers>
      <DataTrigger Binding="{Binding Path=ObjIsOpened, Converter={StaticResource DebugConverter}}" Value="true"> <--- Trigger
         <Setter TargetName="Expander" Property="IsChecked" Value="true"></Setter>
      </DataTrigger>
                    ...
   </DataTemplate.Triggers>
</DataTemplate>

问候,莱拉克斯。

4

2 回答 2

2

首先,我建议您阅读 Josh Smith 的优秀文章 Simplifying the WPF TreeView by Using the ViewModel Pattern

根据那篇文章,我建议为TreeViewItem(使用 的ItemContainerStyle属性TreeView)定义一种样式,将其IsExpanded属性绑定到模型对象的ObjIsOpened属性。然后摆脱你的触发器。

例子:

<Style TargetType="TreeViewItem">
    <Setter Property="IsExpanded" 
        Value="{Binding ObjIsOpened, Converter={StaticResource DebugConverter}}"/>
</Style>

<DataTemplate x:Key="CellTemplate_Name">
   <DockPanel x:Name="dock">
      <ToggleButton x:Name="Expander"
        IsChecked="{Binding Path=IsExpanded, 
                       RelativeSource={RelativeSource 
                           AncestorType={x:Type TreeViewItem}}}"> <--- Binding
    ...
      <ToggleButton/>
    ...
</DataTemplate>
于 2009-12-28T09:49:32.027 回答
1

我怀疑他们没有禁用数据绑定,他们只是有更高的优先级。与其同时使用绑定和触发器,不如使用其中之一(绑定或触发器)?例如,您可以直接绑定到模型,并且根本不使用触发器......

于 2009-12-28T09:44:03.207 回答