C# MVVM-通过数据绑定从列表框中获取所选项目
我正在用C#中的MVVM模式编写应用程序 我的目标是在我自己的用户控件中从列表框中获取所选项目 我已创建了可绑定对象,使用方法更改此对象(选择新对象时调用): 还有Items部件,在xaml中,部件列表框名为ListBox:C# MVVM-通过数据绑定从列表框中获取所选项目,c#,wpf,mvvm,data-binding,C#,Wpf,Mvvm,Data Binding,我正在用C#中的MVVM模式编写应用程序 我的目标是在我自己的用户控件中从列表框中获取所选项目 我已创建了可绑定对象,使用方法更改此对象(选择新对象时调用): 还有Items部件,在xaml中,部件列表框名为ListBox: <ListBox Name="ListBox" SelectionChanged="SelectionChanged" ... /> 值仍然为空,与MyObjectItems相同,但至少MyUserControl中的SelectedItems包含选定项。不够好
<ListBox Name="ListBox" SelectionChanged="SelectionChanged" ... />
值
仍然为空,与MyObjectItems
相同,但至少MyUserControl
中的SelectedItems
包含选定项。不够好:/经过几个小时的尝试,我找到了NuGet软件包。列表SelectedItemsOverride
来自类复选框
允许绑定所选项目的列表:
<UserControl x:Class="View.UserControls.MyUserControl"
...
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
x:Name="Root">
<Grid>
<xctk:CheckListBox Name="ListBox"
ItemSelectionChanged="SelectionChanged"
SelectedItemsOverride="{Binding SelectedItems, ElementName=Root}"
... />
</Grid>
</UserControl>
因此,有约束力:
<uc:MyUserControl ... SelectedItems="{Binding Path=MyObjectItems}" />
工作!我可以访问视图模型中的选定项目-所有内容都很简单。什么是
typeof(ListBoxWithMultipleSelection)
?什么时候调用SelectionChanged
?请尝试提供所有相关详细信息。为什么控件和视图模型中都有SelectedItems
(作为依赖属性)?请注意,对于真正的MVVM,您需要使用视图模型,而不是后面的控件代码。因此,您可以将逻辑从UI中分离出来,还可以使单元测试业务逻辑变得更容易。@是的,这就是为什么使用CheckListBox
是一个很好的解决方案。使用ListBox
时,我无法找到绑定所选项目列表的方法。但现在我可以将列表绑定到SelectedItemsOverride
属性,并在ViewModel中执行所有需要的操作。
private ObservableCollection<MyObject> _myObjectItems;
public ObservableCollection<MyObject> MyObjectItems
{
get { return _myObjectItems; }
set { _myObjectItems = value; }
}
<uc:MyUserControl ... SelectedItems="{Binding Path=MyObjectItems, Mode=OneWayToSource}" />
<UserControl x:Class="View.UserControls.MyUserControl"
...
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
x:Name="Root">
<Grid>
<xctk:CheckListBox Name="ListBox"
ItemSelectionChanged="SelectionChanged"
SelectedItemsOverride="{Binding SelectedItems, ElementName=Root}"
... />
</Grid>
</UserControl>
<uc:MyUserControl ... SelectedItems="{Binding Path=MyObjectItems}" />