前段时间开始研究MVVM模式就是用这个tutorial 。我使用 MicroMvvm。
我有一个带有 EntityFramework 模型的 WPF 项目。我编写了 ViewModel 和 XAML View 。 我想在 DataGrid 中显示我的数据。(2 列数据和 2 按钮列:编辑、删除)
<DataGrid Height="250" ItemsSource="{Binding Books}" AutoGenerateColumns="False" >
<DataGrid.Resources>
<DataTemplate x:Key="DeleteTemplate" >
<Button x:Name="DeleteButton" Command="{Binding DeleteBook, Mode=OneWay}" CommandParameter="{Binding}" >Delete</Button>
</DataTemplate>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Title}" Header="Book"/>
<DataGridTextColumn Binding="{Binding Author}" Header="Author"/>
<DataGridTemplateColumn CellTemplate="{StaticResource EditTemplate}" Header="Редактировать"/>
<DataGridTemplateColumn CellTemplate="{StaticResource DeleteTemplate}" Header="Удалить"/>
</DataGrid.Columns>
</DataGrid>
在我的 LibraryViewModel.cs 中
#region Commands
void DeleteBookExecute()
{
if (_books == null)
return;
//MessageBox.Show("This is delete button. Delete item id:" myMysticalObjectFromCommandParameter );
}
bool CanDeleteBookExecute()
{
return true;
}
public ICommand DeleteBook
{
get
{
return new RelayCommand(DeleteBookExecute, CanDeleteBookExecute);
}
}
当我按下按钮(删除/编辑)时,我想删除/编辑当前对象。 我不知道如何在 MVVM 中做到这一点。
我可以使用 Command="{Binding DeleteBook, Mode=OneWay}"CommandParameter="{Binding}"
来实现吗?
如果正确,我如何从 LibraryViewModel 中的 CommandParameter
获取数据?
最佳答案
正如 DHN 所说,您的命令执行方法 DeleteBookExecute()
、CanDeleteBookExecute()
应具有对象类型的参数。
您的想法指向正确的方向。试试这个:
<DataGrid Name="LibraryGrid"
Height="250"
ItemsSource="{Binding Books}"
AutoGenerateColumns="False" >
和
Command="{Binding DataContext.DeleteBook, ElementName=LibraryGrid}" CommandParameter="{Binding}"
将 ElementName
与 DataContext.DeleteBook
一起使用可以获取 LibraryViewModel 的命令。
关于wpf - 如何获取 WPF 数据网格中的当前元素以及如何使用它执行某些操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15291864/