0

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

在视图模型中:

我已经为第一个列表框处理了 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);
                }                    
     }             
 }

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

请帮忙。

4

1 回答 1

0

您可以简单地将第二个列表框绑定到第一个列表框的 SelectedItems。这将首先在列表框中进行实际选择。

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

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

于 2012-11-29T07:49:27.127 回答