Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVVM-通过数据绑定从列表框中获取所选项目_C#_Wpf_Mvvm_Data Binding - Fatal编程技术网

C# MVVM-通过数据绑定从列表框中获取所选项目

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包含选定项。不够好

我正在用C#中的MVVM模式编写应用程序

我的目标是在我自己的用户控件中从列表框中获取所选项目

我已创建了可绑定对象,使用方法更改此对象(选择新对象时调用):

还有Items部件,在xaml中,部件列表框名为ListBox:

<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}" />