C# 选中列表框中的复选框以选择多个项目,并使用MVVM将其添加到另一个列表框中
使用MVVM 我有两个列表框,其中包含复选框和从数据库绑定的数据 在第一个列表框中选中的项目希望将其添加到第二个列表框中 第一个列表框:C# 选中列表框中的复选框以选择多个项目,并使用MVVM将其添加到另一个列表框中,c#,mvvm,silverlight-5.0,C#,Mvvm,Silverlight 5.0,使用MVVM 我有两个列表框,其中包含复选框和从数据库绑定的数据 在第一个列表框中选中的项目希望将其添加到第二个列表框中 第一个列表框: <pmControls:pmListBox SelectionMode="Multiple" Grid.Row="1" Margin="3" ItemsSource="{Binding ParcelFacilities}" > <interactivity:Interaction.Triggers>
<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>
在ViewMOdel中:
我已经处理了第一个Listbox的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);
}
}
}
public ParcelViewModel(imodaldialdialogservice modalDialogService,IMessageBoxService messageBoxService)
{
parcelFacilities=新的ObservableCollection();
选定的_ParcelFacilities=新的ObservableCollection();
选定的\u ParcelFacilities.CollectionChanged+=新系统。集合。专用化。NotifyCollectionChangedEventHandler(选定的\u ParcelFacilities\u CollectionChanged);
}
作废选定的\u ParcelFacilities\u CollectionChanged(对象发送方,System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
房地产变更(“选定设施”);
}
private void Executelistbox\u SelectionChangeCommand(EventToCommandArgs args)
{
布尔a=已检查的生产力;
foreach(地块设施中的地块设施项目)
{
如果(所选设备!=null)
{
所选设施。添加(项目);
}
}
}
但使用上述代码,第一个列表框中的所有项目都将添加到第二个列表框中,
我不知道如何检查它是否被检查过
请提供帮助。您只需将第二个列表框绑定到第一个列表框的SelectedItems即可。这将首先与列表框中的实际选择一起工作
<ListBox x:Name="second" ItemsSource="{Binding Elementname=first, Path=SelectedItems, Mode=OneWay}"/>
另一种方法是对第二个列表框使用带过滤器的ICollectionView。过滤器只处理checkedParcelFacility属性,第二个列表框绑定到ICollectionView