c# - 对用户单击已选择的ListViewItem,MVVM使用react

标签 c# wpf mvvm

我有一个看起来像这样的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/

相关文章:

c# - System.EntryNotFoundException : Unable to find the entry point in the DLL

c# - 在 ASP.NET Core 中有效地转发来自内部 HttpClient 调用的内容

c# - 如何使用 C# 以编程方式更改 Windows 7 LAN 设置

c# - 如何更新进度条使其平稳增加?

wpf - 通过单击中间按钮关闭 TabItem

c# - 在带有 MVVM 的 WPF 中,在 ListBox 中显示 List<> 成员

c# - 在 Powershell 中获取登录用户

c# - API 路由 : Multiple operations with path

WPF - MVVM 屏幕管理

wpf - 如何从滚动查看器中的最后一项中删除额外的边距?