【发布时间】:2020-01-25 07:24:46
【问题描述】:
在我的代码中,我有一个列表框,我在其中选择带有复选框的项目,问题是如何将这些项目传递给 viewmodel 并从列表框中删除它们
这是我的带有列表框的 Xaml 代码
</Border>
<Border BorderThickness="1" BorderBrush="{DynamicResource ColumnHeaderBorder}" CornerRadius="7" Grid.Column="2" Grid.RowSpan="2" Grid.Row="0"/>
<ListBox Grid.Row="0" Grid.Column="2" Foreground="#FFFFFF" Background="Transparent" BorderThickness="0" Grid.RowSpan="2" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.VerticalScrollBarVisibility="Visible" ItemsSource="{Binding TechTabList}" Margin="5"
BorderBrush="{x:Null}" SelectionMode="Multiple" x:Name="TechListBox">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Focusable" Value="False"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Height="50" Width="auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="800"/>
<ColumnDefinition Width="170"/>
</Grid.ColumnDefinitions>
<Border Grid.ColumnSpan="3" BorderThickness="0,0,0,1" Margin="0,0,0,-1" BorderBrush="{DynamicResource NeonColor}" Opacity="1"/>
<StackPanel x:Name="StackPanel" Orientation="Horizontal" Grid.Column="0" >
<Viewbox Height="40" HorizontalAlignment="Center" VerticalAlignment="Center">
<CheckBox Style="{StaticResource CheckBox}" Margin="0,0,3,0" IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}},Path=IsSelected}"/>
</Viewbox>
<TextBlock Text="{Binding Name}" VerticalAlignment="Center" HorizontalAlignment="Center"/>
</StackPanel>
这是我的带有命令的视图模型,我需要在其中删除选定的项目
ArchiveTable = new RelayCommand(_ArchiveTable);
}
private void _ArchiveTable()
{
//Here foreach on selecteditems but how to pass them here
}
【问题讨论】:
-
如果您从 TechTabList 中删除它们,它们将从 ListBox 中删除
-
将
CheckBox.IsChecked绑定到TechTabList内的项目属性(称为IsChecked),然后在viewmodel中你可以使用linqTechTabLists.Where(item => item.IsChecked)获取所有选中的项目。 -
您的
RelayCommand需要期待Action<object>然后,在您的命令绑定中,您会将所选项目作为CommandParameter传递。像<Button Content="Archive this table" Command="{Binding ArchiveTable}" CommandParameter="{Binding ElementName=TechListBox, Path=SelectedItems}"/>这样的东西。在使用 Selected Items 时有一个问题,当用户选择一个项目时,SelectedItems被填充(如果绑定),当用户选择多个时,SelectedItems被填充,请记住这一点。 -
@XAMlMAX 之后我可以在这些元素上使用 foreach 来删除它们吗?
-
是的,您将拥有
ListBox认为选定的项目。然后,您可以将它们从基础集合中删除,在您的情况下为TechTabList。不过,请确保您的 Collection 通知其项目的更改,为此使用ObservableCollection。