0

私は問題があります。を作成しDataTemplateました。モデルに応じて、のプロパティTreeViewの初期値を設定する必要があります。ただし、トリガー/セッターを使用してこのプロパティを設定すると、データバインディングが無効になることがわかります。ToggleButtonIsChecked

そうですか?はいの場合、それを修正する方法を教えてください。

<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

まず最初に 、ViewModel パターンを使用して WPF TreeView を簡素化する Josh Smith による優れた記事を読むことをお勧めします。

その記事に基づいて、TreeViewItem( のItemContainerStyleプロパティを使用して) のスタイルを定義し、そのプロパティをモデル オブジェクトのプロパティにTreeViewバインドすることをお勧めします。次に、トリガーを取り除きます。IsExpandedObjIsOpened

例:

<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 に答える