无法删除列表框SelectedItem



我在WPF应用程序中使用了一个Listbox,我试图删除SelectedItem,这样用户就可以重新点击它来执行操作。

我有一个经典的列表框:

<ListBox
x:Name="MenuItemList"
Grid.Row="1"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding MenuItems}"
SelectedItem="{Binding SelectedMenu, UpdateSourceTrigger=PropertyChanged}">
[...] </ListBox>

我已经在我的VM中绑定了SelectedMenu:

public MenuItem SelectedMenu
{
get { return null; }
set
{
MenuIsOpened = false;
DisplayedMenu = value;
OnPropertyChanged("SelectedMenu");
}
}

我尝试了另一种方法,在那里我把它改为空

private MenuItem _SelectedMenu;
public MenuItem SelectedMenu
{
get { return _SelectedMenu; }
set
{
MenuIsOpened = false;
DisplayedMenu = value;
_SelectedMenu = null;
OnPropertyChanged("SelectedMenu");
}
}

但它并没有像我想要的那样工作。。。当我点击一个项目时,该属性为null,但在视图中,列表框总是高亮显示所选项目,第二次点击它不会触发该属性。

下面是我的工作示例:

// in constructor or so
AddedBlocks = new ObservableCollection<string>();
// the property
public ObservableCollection<string> AddedBlocks { get; }
/// <summary>
/// Deletes selected block from view and model
/// </summary>
private void OnDeleteSelectedBlock(object parameter)
{
try
{
AddedBlocks.RemoveAt(selectedBlockIndex);
}
}

和XAML:

<ListBox ItemsSource="{Binding Blocks, Mode=OneWay}" SelectedIndex="{Binding SelectedBlockIndex, Mode=TwoWay}">
<ListBox.ContextMenu>
<ContextMenu>
<MenuItem Header="Delete block" Command="{Binding DeleteSelectedBlock}"/>
</ContextMenu>
</ListBox.ContextMenu>
</ListBox>

请参阅selectedIndex上的双向绑定。也许使用它比使用selectedItem更容易。希望这能有所帮助。如果你不想使用上下文菜单,添加一个按钮或这个

<KeyBinding Key="Delete" Command="{Binding DeleteSelectedBlock}"/>

我做了其他事情来解决我的问题。我没有尝试更改所选项目,但我在Listbox 上添加了一个命令

<ListBox
x:Name="MenuItemList"
Grid.Row="1"
ItemsSource="{Binding MenuItems}"
SelectedItem="{Binding SelectedMenu, UpdateSourceTrigger=PropertyChanged}">
[...]
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonUp">
<i:InvokeCommandAction Command="{Binding CloseMenuCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</ListBox>

在我的MVVM中,我一开始就想关闭菜单:

private void ExecuteCloseMenuCommand(object o)
{
MenuIsOpened = false;
}

通过这种方式,用户可以重新单击已经选择的项目菜单,并且该菜单仍将通过单击而关闭。

最新更新