WPF绑定listview所选项扩展器扩展

时间:2012-06-26 00:57:56

标签: wpf

我刚开始用WPF测试水,我试图将扩展器的扩展属性和listview项的selected属性绑定在一起,这样当选择列表视图项时,扩展器会扩展或下降尝试在扩展器扩展时将列表视图项设置为选择的另一条道路

到目前为止,我已经

<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>

但我无法弄清楚如何在绑定中引用扩展器。任何帮助或推动正确的方向将不胜感激。

由于

1 个答案:

答案 0 :(得分:4)

嗯..

你无法将listboxitem与自己的模板连接起来...因为基本上他们不知道......这在这里不起作用:

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

你也无法触发扩展器的触发器,因为setter不接受绑定..

<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>

答案是:

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

如果您愿意,可以使用绑定,mode = OneWayToSource,具体取决于您的需求..