最好的方法是将绑定焦点更改为 ListCollectionViews,因为这将允许您管理光标。下面是一个例子:
视图模型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data;
namespace BindingSample
{
public class ViewModel
{
private string[] _items = new[] { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
public ViewModel()
{
List1 = new ListCollectionView(_items);
List2 = new ListCollectionView(_items);
List3 = new ListCollectionView(_items);
List1.CurrentChanged += (sender, args) => SyncSelections(List1);
List2.CurrentChanged += (sender, args) => SyncSelections(List2);
List3.CurrentChanged += (sender, args) => SyncSelections(List3);
}
public ListCollectionView List1 { get; set; }
public ListCollectionView List2 { get; set; }
public ListCollectionView List3 { get; set; }
private void SyncSelections(ListCollectionView activeSelection)
{
foreach (ListCollectionView view in new[] { List1, List2, List3 })
{
if (view != activeSelection && view.CurrentItem == activeSelection.CurrentItem)
view.MoveCurrentTo(null);
}
}
}
}
看法
<Window x:Class="ContextMenuSample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<StackPanel Orientation="Vertical">
<ListBox ItemsSource="{Binding List1}" />
<ListBox ItemsSource="{Binding List2}" />
<ListBox ItemsSource="{Binding List3}" />
</StackPanel>
</Window>
这将允许您只选择一项。它现在是硬编码的,但可以很容易地使其更灵活地用于附加列表。