WPF的ListBox控件继承自一个叫Selector的类,Selector是个抽象(abstract)类,意味着Selector是个无法实例化的类,而ListBox继承自Selector类,也就意味着ListBox实现了好多Selector类当中的成员或方法。
今天简单介绍下ListBox的属性IsSynchronizedWithCurrentItem,其实这个属性是继承自Selector的。
IsSynchronizedWithCurrentItem如果为true,意味着用户在界面上用鼠标选择一个项(每次选择会实时地改变SelectedItem属性,这个属性其实也是来自Selector类)会立即更新(同步)到对象集合(ListBox的Items属性)的当前项(Items对象的CurrentItem属性),反之亦成立。说这么多废话,还是画个图吧:
如果IsSynchronizedWithCurrentItem的值是false,则两者不会相互影响。
下面举个例子说明下吧:
XMAL代码:
<StackPanel> <ListBox Margin="5" Name="firstListBox" DisplayMemberPath="FirstName" IsSynchronizedWithCurrentItem="True"></ListBox> <ListBox Margin="5" Name="secondListBox" DisplayMemberPath="FirstName" IsSynchronizedWithCurrentItem="True"></ListBox> </StackPanel>
c#后台代码:
public class Person { public string FirstName { get; set; } public string LastName { get; set; } public Person(string f,string l) { FirstName = f; LastName = l; } } /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public static ObservableCollection<Person> persons { get; set; } = new ObservableCollection<Person>(); public MainWindow() { persons.Add(new Person("MeiLin","Xu")); persons.Add(new Person("JieShi", "Jiang")); InitializeComponent(); firstListBox.ItemsSource = persons; secondListBox.ItemsSource = persons; } }
我们可以看到下面的效果:
仔细看上图,在任何一个ListBox中用鼠标选择一项,在另一个ListBox中的选择也会跟着变。