我将一些记录与数据模板按钮绑定,用于删除 WPF 数据网格中选定行的记录。好吧,我的问题是删除命令不起作用。我真的不知道为什么它不起作用,尽管把所有事情都做对了。请查看代码并告诉我我做错了什么。你的一点点努力就能完成我的工作。谢谢
<Window x:Class="DemoMVVM.View.EmployeeDetails"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewModel="clr-namespace:DemoMVVM.ViewModel"
Title="EmployeeDetails" Height="200" Width="500">
<Window.DataContext>
<viewModel:EmployeeDetailsViewModel></viewModel:EmployeeDetailsViewModel>
</Window.DataContext>
<Grid>
<DataGrid AutoGenerateColumns="False" CanUserAddRows="False" ItemsSource="{Binding EmpDetailsList}" Grid.Column="0" SelectedItem="{Binding SelectedRecord,Mode=TwoWay}" Margin="10,17,10,8" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Id}" IsReadOnly="True" Visibility="Collapsed" Width="90"></DataGridTextColumn>
<DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" IsReadOnly="True" Width="*"></DataGridTextColumn>
<DataGridTextColumn Header="Age" Binding="{Binding Path=Age}" IsReadOnly="True" Width="*"></DataGridTextColumn>
<DataGridTextColumn Header="City" Binding="{Binding Path=City}" IsReadOnly="True" Width="*"></DataGridTextColumn>
<DataGridTemplateColumn Header="Delete" Width="60" IsReadOnly="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="Delete" Command="{Binding Path=DeleteCommand}" ></Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
public class EmployeeDetailsViewModel
{
private ObservableCollection<EmployeeModel> _empDetailsList;
private EmployeeModel _selectedEmp;
private RelayCommand _deleteCommand;
public EmployeeDetailsViewModel()
{
_empDetailsList = new ObservableCollection<EmployeeModel>()
{
new EmployeeModel(){Id=1,Name="ABC",Age=26,City="Las Vegas"},
new EmployeeModel(){Id=2,Name="MNO",Age=27,City="New Delhi"},
new EmployeeModel(){Id=3,Name="XYZ",Age=25,City="Sydney"},
};
}
public ObservableCollection<EmployeeModel> EmpDetailsList
{
get { return _empDetailsList; }
}
public ICommand DeleteCommand
{
get
{
if (_deleteCommand == null)
_deleteCommand = new RelayCommand(Delete);
return _deleteCommand;
}
}
private void Delete()
{
}
}
中继命令类`internal class RelayCommand : ICommand { #region Fields
readonly Action _execute;
readonly Func<bool> _canExecute;
#endregion
#region Constructors
public RelayCommand(Action execute)
: this(execute, null)
{
}
public RelayCommand(Action execute, Func<bool> canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute");
_execute = execute;
_canExecute = canExecute;
}
#endregion // Constructors
#region ICommand Members
[DebuggerStepThrough]
public bool CanExecute(object parameter)
{
return _canExecute == null ? true : _canExecute();
}
public event EventHandler CanExecuteChanged
{
add
{
if (_canExecute != null)
CommandManager.RequerySuggested += value;
}
remove
{
if (_canExecute != null)
CommandManager.RequerySuggested -= value;
}
}
public void Execute(object parameter)
{
_execute();
}
#endregion // ICommand Members
}`