Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.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#_Mvvm_Silverlight 5.0 - Fatal编程技术网

C# 选中列表框中的复选框以选择多个项目,并使用MVVM将其添加到另一个列表框中

C# 选中列表框中的复选框以选择多个项目,并使用MVVM将其添加到另一个列表框中,c#,mvvm,silverlight-5.0,C#,Mvvm,Silverlight 5.0,使用MVVM 我有两个列表框,其中包含复选框和从数据库绑定的数据 在第一个列表框中选中的项目希望将其添加到第二个列表框中 第一个列表框: <pmControls:pmListBox SelectionMode="Multiple" Grid.Row="1" Margin="3" ItemsSource="{Binding ParcelFacilities}" > <interactivity:Interaction.Triggers>

使用MVVM

我有两个列表框,其中包含复选框和从数据库绑定的数据

在第一个列表框中选中的项目希望将其添加到第二个列表框中

第一个列表框:

 <pmControls:pmListBox SelectionMode="Multiple" Grid.Row="1" Margin="3" ItemsSource="{Binding ParcelFacilities}" >

            <interactivity:Interaction.Triggers>
                <interactivity:EventTrigger EventName="SelectionChanged">
                    <shared:EventToCommandTrigger Command="{Binding Listbox_SelectionChangeCommand}" />
                </interactivity:EventTrigger>
            </interactivity:Interaction.Triggers>


            <pmControls:pmListBox.ItemTemplate >
                <DataTemplate >
                    <pmControls:pmCheckBox  Content="{Binding Title}" Margin="3" Width="200"  IsChecked="{Binding checkedParcelFacility}" >

                    </pmControls:pmCheckBox>

                </DataTemplate>
            </pmControls:pmListBox.ItemTemplate>

第二个列表框:

 <pmControls:pmListBox SelectionMode="Multiple"   Grid.Row="1" Margin="3" ItemsSource="{Binding Selected_ParcelFacilities}" 
                                   Height="100">

            <pmControls:pmListBox.ItemTemplate >
                <DataTemplate >

                    <pmControls:pmCheckBox Content="{Binding Title}" Margin="3" Width="200" ></pmControls:pmCheckBox>

                </DataTemplate>
            </pmControls:pmListBox.ItemTemplate>

在ViewMOdel中:

我已经处理了第一个Listbox的SelectionChanged事件,并尝试将选中的元素添加到集合中 命名为Selected_ParcelFacilities并将其绑定到第二个列表框

         public ParcelViewModel(IModalDialogService modalDialogService, IMessageBoxService messageBoxService)
     {       

            parcelFacilities = new ObservableCollection<Parcel_Facility>();

            Selected_ParcelFacilities = new ObservableCollection<Parcel_Facility>();

            Selected_ParcelFacilities.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Selected_ParcelFacilities_CollectionChanged);
  }


 void Selected_ParcelFacilities_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
 {
     OnPropertyChanged("Selected_ParcelFacilities");
 }

private void Executelistbox_SelectionChangeCommand(EventToCommandArgs args)
 {

     bool a = checkedParcelFacility;

     foreach (Parcel_Facility item in parcelFacilities)
     {

                if (Selected_ParcelFacilities != null)
                {
                    Selected_ParcelFacilities.Add(item);
                }                    
     }             
 }
public ParcelViewModel(imodaldialdialogservice modalDialogService,IMessageBoxService messageBoxService)
{       
parcelFacilities=新的ObservableCollection();
选定的_ParcelFacilities=新的ObservableCollection();
选定的\u ParcelFacilities.CollectionChanged+=新系统。集合。专用化。NotifyCollectionChangedEventHandler(选定的\u ParcelFacilities\u CollectionChanged);
}
作废选定的\u ParcelFacilities\u CollectionChanged(对象发送方,System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
房地产变更(“选定设施”);
}
private void Executelistbox\u SelectionChangeCommand(EventToCommandArgs args)
{
布尔a=已检查的生产力;
foreach(地块设施中的地块设施项目)
{
如果(所选设备!=null)
{
所选设施。添加(项目);
}                    
}             
}
但使用上述代码,第一个列表框中的所有项目都将添加到第二个列表框中, 我不知道如何检查它是否被检查过


请提供帮助。

您只需将第二个列表框绑定到第一个列表框的SelectedItems即可。这将首先与列表框中的实际选择一起工作

<ListBox x:Name="second" ItemsSource="{Binding Elementname=first, Path=SelectedItems, Mode=OneWay}"/>

另一种方法是对第二个列表框使用带过滤器的ICollectionView。过滤器只处理checkedParcelFacility属性,第二个列表框绑定到ICollectionView