请问WPF如何将多个Listbox数据绑定到一个Listbox上?

有2个listbox提供数据,第三个listbox显示前2个选中的元素.
应该怎样写绑定呢?
前两个listbox是多选模式.

怎样在多选模式下监听每个元素的选中和未选中事件?

listbox是显示数据集合的,为何你第三个listbox是用来显示单个元素的 。。。
如果你在后台有个类,比如Student。里面有个Name属性。第二个listbox绑定Student对象集合
class Student
{
public string Name { get; set; }
}
List<Student> Students = new List<Student>();
Students.Add(new Student() { Name = "aaa" });
Students.Add(new Student() { Name = "bbb" });
Students.Add(new Student() { Name = "ccc" });

listbox.ItemsSource = Students;
前台代码:
<StackPanel Width="200">
<ListBox x:Name="listbox" SelectedValuePath="Name" DisplayMemberPath="Name"/>
<TextBlock x:Name="txtName" Text="{Binding ElementName=listbox, Path=SelectedValue}" />
</StackPanel>
显示单个对象(第二个listbox的选中对象)的值用一个textblock就可以了么。直接将listbox的SelectedValue绑定到text属性上不就完事了。追问

好像没有说清楚.第3个listbox是显示前2个中选中的元素,前两个listbox是多选的.不是单选.因此也是一个集合.
前两个listbox是多选,怎样响应选中和未选中的事件呢?

追答

选中和未选中事件 = = 你以为是checkbox还是radiobutton啊。listbox是通过SelectionChanged事件来实行选项变化的。
多选的话,只要设置listbox的SelectionMode="Multiple"就可以了。此时获得的listbox的SelectedItems就是一个集合了,你可以把这个集合赋值给第三个listbox所绑定的那个集合身上。
具体的做法就是:第三个listbox后台绑定一个集合对象。然后在第一个和第二个listbox的SelectionChanged里对这个集合对象做增加项和删除项的操作。所以第三个listbox绑定的这个集合对象类型应该是ObservableCollection,这样就能通知到前台。

追问

其实我是想能不能不使用第三个集合,直接绑定到前2个的SelectedItems上.

是不是通过SelectionChangedEventArgs.AddedItems 来显示当前点击选中的元素?
我已经试过,是这样,不知有没有更好的方法.

追答

只要逻辑合理,便于维护和理解,什么方法都可以

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答