我有一个看起来像这样的ListView,它控制着打开应用程序中的哪个选项卡。
<ListView Grid.ColumnSpan="2" Grid.Row="1" SelectedItem="{Binding Path=SelectedSubstanceName}" Name="listView" ItemsSource="{Binding Path=Substances}" HorizontalAlignment="Stretch" Margin="2" VerticalAlignment="Stretch">
<ListView.ContextMenu>
<ContextMenu>
<MenuItem Header="Lägg till" Command="{Binding AddSubstanceCommand}"/>
<MenuItem Header="Ta bort" Command="{Binding RemoveSubstanceCommand}"/>
</ContextMenu>
</ListView.ContextMenu>
<ListView.ItemTemplate>
<DataTemplate>
<WrapPanel>
<TextBlock Text="{Binding Name}" FontWeight="Bold" />
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我使用SelectedSubstanceName属性检测要打开或切换到的选项卡(如果已打开)。
该属性如下所示:
private SubstanceName selectedSubstanceName;
public SubstanceName SelectedSubstanceName
{
get
{
return selectedSubstanceName;
}
set
{
selectedSubstanceName = value;
OnPropertyChanged("SelectedSubstanceName");
if (selectedSubstanceName != null)
{
if (!Tabs.Any(t => t.Identify(selectedSubstanceName.SubstanceNameID, typeof(SubstanceTabsViewModel))))
AddTab(selectedSubstanceName);
else
SelectedTab = Tabs.First(t => t.Identify(selectedSubstanceName.SubstanceNameID, typeof(SubstanceTabsViewModel)));
}
}
}
我无法解决的情况是,当用户单击“someSubstance”时,打开了相应的选项卡,用户将其关闭,并且仍然选择了“someSubstance”。如果用户想再次打开它,则他必须选择一些其他物质(然后将被打开),然后再次单击“someSubstance”。即使单击相同的ListViewItem也可以触发属性吗?
我知道我可以在双击上添加事件,但理想情况下,我想避免事件和双击。
最佳答案
我认为问题在于,第一次单击列表后就设置了列表的SelectedItem
。单击同一项目后,第二次SelectedItem
不会更改,因为它已被设置为该项目。您应该做的是在单击之后将SelectedItem
设置为null
。
关于c# - 对用户单击已选择的ListViewItem,MVVM使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25443987/