我有一个绑定到数据表的数据绑定多选列表框。当我选择listboxitem时,我希望自动选择同一列表框中的其他listboxitems。我希望只需点击一下即可选择多个项目。我怎样才能做到这一点?我无法在SelectionChanged
事件中执行此操作,因为它会导致再次调用同一事件并完全打破我的逻辑。
请帮忙。任何帮助将受到高度赞赏。
更新
我的列表框已绑定到具有IsSelected列的数据表。我在样式设置器中使用此列的值来选择listboxitem。假设我在datatable中有10行。如果用户选择了第二个listboxitem,我可以将数据库中的对应行的isselected选为1。
但是我怎样才能同时选择其他项目?我认为肯特说,我宁愿使用属性进行绑定。但是,如何使用属性将列表框绑定到数据表?
答案 0 :(得分:8)
将IsSelected
绑定到数据类中的属性。更改属性后,执行逻辑以更新其他数据对象中的IsSelected
属性:
<ListBox>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="IsSelected" Value="{Binding IsSelected}"/>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
然后在您的数据类中,您可以使用以下内容:
public bool IsSelected
{
get { return _isSelected; }
set
{
if (_isSelected != value)
{
_isSelected = value;
OnPropertyChanged("IsSelected");
UpdateOtherItems();
}
}
}
或者您可以让数据项引发IsSelectedChanged
事件,并让拥有类管理选择的相互依赖性。
答案 1 :(得分:0)
是否有一个“SelectedItem”属性,该属性的setter中的逻辑将处理选择其他“喜欢”项目?
这也许就是我要去的方式,很难说出更多细节。
答案 2 :(得分:0)
我正在做类似的事情。
我有单个选择的组合框,我用数据库中的Selected Value属性加载,现在我正在处理多选列表框 - 我有一个选择列表,我需要绑定到数据库列表框的选定列表。
如果没有循环,我没有办法做到这一点。
我看到listbox读/写属性,用于获取或设置Items或SelectedItems的Items,SelectedItem / Index / Value或只读属性。
答案 3 :(得分:0)
也许这是作弊,但是,当您在SelectionChanged事件中添加项目时,您尝试在选择多个项目时将IsEnabled设置为false,然后将其设置为true afterwords,我认为应该保留控件解雇事件?
答案 4 :(得分:0)
我创建了一个你可能会觉得有用的MultiSelectCollectionView:
http://grokys.blogspot.com/2010/07/mvvm-and-multiple-selection-part-iii.html