使用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);
}
}
}
但是使用上面的代码,第一个列表框中的所有项目都会添加到第二个, 我没有得到如何检查它是否被咀嚼。
请帮助。
答案 0 :(得分:0)
您只需将第二个列表框绑定到第一个列表框的SelectedItems即可。这将首先与列表框中的实际选择一起使用。
<ListBox x:Name="second" ItemsSource="{Binding Elementname=first, Path=SelectedItems, Mode=OneWay}"/>
另一种方法是使用带有过滤器的ICollectionView作为第二个列表框。过滤器只处理checkedParcelFacility属性,第二个列表框绑定到ICollectionView。