最好的方法是改變你的綁定焦點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>
這將使您只能選擇一個項目。目前它是硬編碼的,但對於其他列表可以很容易地變得更加靈活。
你說這份清單是靜態的,對吧?所以你不應該只能刪除選定的項目,它會自動更新所有行? – McGarnagle
我不希望它從列表中刪除;如果之前還有另一個與此項目一起選擇的ComboBox,則必須刪除此ComboBox選擇。 – iop
爲什麼不使用所有項目「AllItems」的列表,一個用於所選項目「SeledtedItems」,第三個項目使用可用項目「AvailableItems」,後者是「AllItems」減去「SelectedItems」的計算。該列表是您綁定到ComboBoxes的ItemsSource的列表。 每當「SelectedItems」更改時,都會在「AvailableItems」上觸發NotifyPropertyChanged。 – SvenG