1

私はWPFで水をテストし始めたばかりで、エキスパンダーの展開されたプロパティとリストビュー項目の選択されたプロパティを一緒にバインドしようとしています。エキスパンダーの展開時にリストビュー項目を選択済みに設定する

これまでのところ、私は持っています

<ListView HorizontalAlignment="Stretch"  Name="listView1" VerticalAlignment="Stretch" SelectionMode="Single" >
        <ListView.Resources>
            <Style TargetType="{x:Type ListViewItem}">
                <Setter Property="IsSelected" Value="{Binding Path=IsExpanded, Mode=TwoWay}"/>
            </Style>
        </ListView.Resources>
        <ListView.ItemTemplate>
            <DataTemplate>
                <Expander>
                        <TextBlock Text="{Binding Name}"></TextBlock>
                </Expander>
            </DataTemplate>
        </ListView.ItemTemplate>            
    </ListView>

しかし、バインディングでエキスパンダーを参照する方法がわかりません。正しい方向への助けやナッジをいただければ幸いです。

ありがとう

4

1 に答える 1

5

Well..

You can not connect listboxitem with its own template ... Because basically they do not know... That would not work here:

 <Style TargetType="ListBoxItem">
             <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=expanderHeader,Mode=OneWay}" Value="True">
                 <Setter Property="IsSelected" value="True"/>
                    </ DataTrigger>
             </ Style.Triggers>
     </ Style>

You also can not fire a trigger of the expander, because setters do not accept binding ..   

<Expander.Style>
     <Style TargetType="Expander">
         <Style.Triggers>
             <Trigger Property="IsExpanded" Value="True">
                 <Setter Property="{Binding RelativeSource={RelativeSource AncestorType=ListBoxItem, Mode=FindAncestor}, Path=IsSelected}" Value="True"/>
             </ Trigger>
          </ Style.Triggers>
     </ Style>
</ Expander.Style>

The answer is this:

    <ListBox.ItemTemplate>
        <DataTemplate>
               <Expander  x:Name="expanderHeader" IsExpanded="{Binding Mode=TwoWay, Path=IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem, Mode=FindAncestor}}">
                 <!-- Content -->
                </Expander>
        </DataTemplate>
    </ListBox.ItemTemplate>

If you prefer you can use the binding, mode = OneWayToSource, depending on your needs ..

于 2012-06-26T01:55:19.060 に答える