0

MVVMを使用して、

チェックボックスを含む2つのリストボックスがあり、データはデータベースからバインドされています。

最初のリストボックスでチェックされたアイテムは、2番目のリストボックスに追加したいと考えています。

最初のリストボックス:

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

2番目のリストボックス:

 <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イベントを処理し、Selected_ParcelFacilitiesという名前のコレクションにチェック済みの要素を追加して2番目のリストボックスにバインドしようとしました。

         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);
                }                    
     }             
 }

しかし、上記のコードを使用すると、最初のリストボックスのすべての項目が2番目のリストボックスに追加されます。これは、チェックされているかどうかを確認する方法がわかりません。

助けてください。

4

1 に答える 1

0

2番目のリストボックスを最初のリストボックスのSelectedItemsにバインドするだけです。これは、最初にリストボックスで実際に選択すると機能します。

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

もう1つのアプローチは、2番目のリストボックスにフィルター付きのICollectionViewを使用することです。フィルタはcheckedParcelFacilityプロパティを処理するだけで、2番目のリストボックスはICollectionViewにバインドされます。

于 2012-11-29T07:49:27.127 に答える