问题当我按下红色“X”时,我想从ObserableCollection中删除一篇文章。但我不知道如何获得当前Artcile。我有一个类Artcile。和保存不同文章的列表。
Xaml代码
<ItemsControl ItemsSource="{Binding CartArticles}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" BorderThickness="2" CornerRadius="30,30,30,30" Margin="0,15,0,30" MinWidth="100" MaxWidth="600" >
<Grid Margin="0,0,0,10" Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Image Width="100" Height="70" Source="{Binding PathPic}" Margin="0,10,0,0"/>
<TextBlock FontWeight="Bold" Grid.Column="1" FontSize="17" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Name}"/>
<StackPanel Grid.Column="2" HorizontalAlignment="Center" Orientation="Horizontal" VerticalAlignment="Center" >
<TextBlock FontWeight="Bold" FontSize="17" Foreground="DimGray" Text="{Binding Quantity}"/>
<TextBlock Text=" x " FontSize="16" Foreground="DimGray" />
<TextBlock FontWeight="Bold" FontSize="17" Foreground="DimGray" Text="{Binding Price}" />
<TextBlock FontWeight="Bold" FontSize="17" Foreground="DimGray" Text=" Euro" />
</StackPanel>
<StackPanel Grid.Column="2" HorizontalAlignment="Center" Orientation="Horizontal" VerticalAlignment="Bottom" >
<TextBlock FontWeight="Bold" Grid.Column="2" FontSize="17" HorizontalAlignment="Center" VerticalAlignment="Bottom" Text="{Binding CompleteArticlePrice}"/>
<TextBlock FontWeight="Bold" FontSize="17" Foreground="DimGray" Text=" Euro" />
</StackPanel>
<Button Name="DeleteCartArticle" Grid.Column="2" Width="20" Height="20" Margin="0,13,20,0" Content="X" FontSize="15" Foreground="Red" Background="Transparent" BorderThickness="0" HorizontalAlignment="Right" VerticalAlignment="Center" Click="DeleteCartArticle_Click"/>
</Grid>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
字符串
ObserableCollection
的数据
输出
的
1条答案
按热度按时间n1bvdmb61#
很高兴看到你从previous question继续前进:)
正如@Clemens所建议的,对于MVVM中的按钮,你也应该使用绑定和命令,它们将处理单击操作。但是如果你使用
ItemsControl
(而不是ListView
或ListBox
,它们具有SelectedItem
属性来简化我们的生活),按钮绑定有一个小技巧(在下面的XAML示例部分中描述)。所以,首先你需要创建一个自定义类,它从
System.Windows.Input
命名空间实现ICommand
接口。自定义命令类应该接受一些object
作为参数,并且“对象”是来自ItemsControl
的一个项目。所以,让我们称之为ParameterizedCommand
:字符串
现在在你的ViewModel中(也就是前面的答案中的
CartViewModel
)添加一个命令,从CartArticles
集合中删除CartArticle
:型
最后,在视图中绑定按钮到该命令。要允许项目模板中的按钮“查找”ViewModel和存储的命令,您可以使用
RelativeSource
,它是父ItemsControl
,作为CommandParameter
,我们传递项目本身:型
现在,点击每个
CartArticle
中的“删除”按钮将从集合中删除该项目。只是不要忘记再次添加一些样式:x1c 0d1x的数据