Я вытаскиваю элементы из БД в список, состоящий из нескольких столбцов. Я хотел бы добавить кнопку удаления для каждого элемента я тянуть из БД, но я не могу передать идентификатор элемента, он всегда говорит 0.WPF Prism listbox button
<ListBox ItemsSource="{Binding LbPlugins}" HorizontalContentAlignment="Stretch" Grid.Row="1">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"/>
<ColumnDefinition Width="5*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<CheckBox Grid.Column="0" Content="{Binding Name}" IsChecked="{Binding IsActive}"/>
<Label Grid.Column="1" Content="{Binding ClassName}"/>
<Button Grid.Column="2" Content="E" Command="{Binding btnEditPluginCommand}"/>
<Button Grid.Column="3" Content="D" Command="{Binding Path=DataContext.btnDeletePluginCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}" CommandParameter="{Binding PluginId}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
В ViewModel:
private int pluginId;
public int PluginId
{
get { return pluginId; }
set { SetProperty(ref pluginId, value); }
}
public DelegateCommand btnDeletePluginCommand { get; set; }
...
в конструкторе
btnDeletePluginCommand = new DelegateCommand(DeletePlugin);
...
private void DeletePlugin()
{
var result = MessageBox.Show("Are you sure you want to delete this plugin?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (result == DialogResult.Yes)
{
MessageBox.Show("YAY, ID=" + pluginId);
}
}