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

时间:2012-11-29 06:20:45

标签: c# mvvm silverlight-5.0

使用MVVM,

我有两个包含Checkbox的列表框,数据是从数据库中绑定的。

在第一个列表框中检查的项目想要将其添加到第二个列表框中。

First ListBox:

 <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>

第二个ListBox:

 <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中:

我已经处理了SelectionChanged事件对于第一个Listbox并尝试将checked元素添加到集合中 命名为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);
                }                    
     }             
 }

但是使用上面的代码,第一个列表框中的所有项目都会添加到第二个, 我没有得到如何检查它是否被咀嚼。

请帮助。

1 个答案:

答案 0 :(得分:0)

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

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

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