2012-11-29 23 views
0

使用MVVM另一個列表框,複選框在列表框中選擇多個項目,並把它添加到使用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夏娃NT對於第一ListBox和tryied託運元素添加到收藏 命名爲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); 
       }      
    }    
} 

但是,使用上面的代碼從第一列表框中的所有項目都增加了第二, 我沒有得到如何檢查wheather其cheked與否。

請幫忙。

回答

0

您可以將第二個列表框只是綁定到你的第一個SelectedItems。這將首先在列表框中進行真正的選擇。

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

另一種方法是使用帶過濾器ICollectionView中的第二個列表框。過濾器簡單地處理checkedParcelFacility屬性和第二列表框被綁定到的ICollectionView的。

相關問題