Wpf isselected在第二个listview上与在第一个listview上相同

Wpf isselected在第二个listview上与在第一个listview上相同,wpf,listview,mvvm,datatemplate,relativesource,Wpf,Listview,Mvvm,Datatemplate,Relativesource,我得到了一个包含两个列表视图的网格。ListView与datatemplate=Stackpanel相同(只有itemsource与其他项目不同),datatemplate=Stackpanel有一个标签和一个其他网格。现在,我希望网格(位于Datatemplate内的stackpanel内)仅在选中项(标签)时可见。我用以下代码进行了尝试(我将其放在Listview的datatemplate中: <StackPanel> <Label content={binding bla

我得到了一个包含两个列表视图的网格。ListView与datatemplate=Stackpanel相同(只有itemsource与其他项目不同),datatemplate=Stackpanel有一个标签和一个其他网格。现在,我希望网格(位于Datatemplate内的stackpanel内)仅在选中项(标签)时可见。我用以下代码进行了尝试(我将其放在Listview的datatemplate中:

<StackPanel>
<Label content={binding blabla} />
<Grid Visibility="{Binding IsSelected,RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}, Mode=FindAncestor}, Mode=OneWay,  Converter={StaticResource BooleanToVisibilityConverter}}" >
...random labels etc...
</Gird>
</StackPanel>

…随机标签等。。。
这是可行的!但是,如果我在第二个列表视图中选择了一个项目(并且只有第二个),那么第一个也会显示该网格(在相同的“项目级别”)(例如,在第二个列表视图中,我选择了第三个项目(标签),然后网格显示在第二个列表视图的第三个项目上,但第三个项目网格显示在第一个列表视图上

我认为这与相对来源有关,但我找不到答案。
希望你们能帮助我。

仅仅因为一个
列表框没有焦点,并不意味着一个项目被取消选中,而且我怀疑你们将
SelectedItem
SelectedIndex
绑定到两个
列表视图
中的相同属性,这使得
ListViewItem.IsSelected
在这两个属性之间同步两个列表视图

我建议将网格的可见性条件设置为基于2个属性,而不是基于1个属性:
ListViewItem.IsSelected
为true,并且如果
ListViewItem.IsKeyboardFocusWithin
设置为true

下面是一个使用
DataTrigger

<Style TargetType="{x:Type Grid}" x:Key="GridStyle">
    <Setter Property="Visibility" Value="Collapsed" />
    <Style.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Value="True" Binding="{Binding Path=IsSelected, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}}" />
                <Condition Value="True" Binding="{Binding Path=IsKeyboardFocusWithin, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}}" />
            </MultiDataTrigger.Conditions>
            <Setter Property="Visibility" Value="Visible" />
        </MultiDataTrigger>
    </Style.Triggers>
</Style>


实际上现在回想起来,我认为
IsKeyboardFocusWithin
会将项目设置为选中,所以也许你只需要使用
IsKeyboardFocusWithin
而不是
IsSelected

,我一回到家就会试试这个。我想你会再次成为我的英雄Rachel n1!:好了,另外,现在如果我点击列表视图中的一个项目,它会起作用打开的其他listview项(网格可见)现在关闭。是否有办法解决此问题?@Maximc如果您想为所选项目维护可见的
网格
,我将使用
IsSelected
,而不是
IsKeyboardFocusWithin
,并确保将ListView的
SelectedItem
SelectedIndex
绑定到两个不同的值。因此nds就像它们被绑定到相同的值,所以选择是同步的。