Wpf isselected在第二个listview上与在第一个listview上相同
我得到了一个包含两个列表视图的网格。ListView与datatemplate=Stackpanel相同(只有itemsource与其他项目不同),datatemplate=Stackpanel有一个标签和一个其他网格。现在,我希望网格(位于Datatemplate内的stackpanel内)仅在选中项(标签)时可见。我用以下代码进行了尝试(我将其放在Listview的datatemplate中: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
<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就像它们被绑定到相同的值,所以选择是同步的。