C# WPF MVVM中EditUitvaartleider方法无法执行求助
WPF MVVM编辑功能未触发的问题排查与解决
核心问题定位
你写的var EditUitvaartleider = overledeneRepository.EditUitvaartleider;这行代码只是引用了方法的地址,并没有实际调用方法。方法调用必须加括号并传入必要参数,否则不会执行任何逻辑。
具体修复步骤
1. 修正方法调用语法
将原代码改为带参数的方法调用形式,比如如果需要传入当前的UitvaartLeider对象:
// 替换原引用代码,改为实际调用 var editResult = overledeneRepository.EditUitvaartleider(UitvaartLeider);
2. 确认Repository层方法实现
检查OverledeneRepository中的EditUitvaartleider方法是否正确实现了数据库更新逻辑,示例实现如下:
public bool EditUitvaartleider(UitvaartLeider uitvaartLeider) { using (var connection = new SqlConnection("你的SQL Server连接字符串")) { string updateSql = @" UPDATE UitvaartLeider SET Naam = @Naam, Telefoon = @Telefoon WHERE UitvaartId = @UitvaartId"; var command = new SqlCommand(updateSql, connection); command.Parameters.AddWithValue("@UitvaartId", uitvaartLeider.UitvaartId); command.Parameters.AddWithValue("@Naam", uitvaartLeider.Naam); command.Parameters.AddWithValue("@Telefoon", uitvaartLeider.Telefoon); connection.Open(); int affectedRows = command.ExecuteNonQuery(); return affectedRows > 0; } }
3. 验证Command绑定与实现
- 确保View中按钮的Command绑定正确指向ViewModel的SaveCommand:
<Button Content="Volgende" Command="{Binding SaveCommand}" /> - 确认ViewModel中的SaveCommand正确实现了ICommand接口(以RelayCommand为例):
public ICommand SaveCommand { get; } private readonly IOverledeneRepository overledeneRepository; public OverledeneViewModel(IOverledeneRepository overledeneRepository) { this.overledeneRepository = overledeneRepository; SaveCommand = new RelayCommand(ExecuteSaveCommand, CanExecuteSaveCommand); } private bool CanExecuteSaveCommand() { // 验证必填字段逻辑 return !string.IsNullOrEmpty(UitvaartLeider.Naam) && UitvaartLeider.UitvaartId != Guid.Empty; } private void ExecuteSaveCommand() { if (UitvaartLeider.UitvaartId != Guid.Empty) { // 这里改为实际方法调用 var editResult = overledeneRepository.EditUitvaartleider(UitvaartLeider); // 可根据返回结果处理成功/失败逻辑 } }
4. 确保CanExecute状态实时更新
当必填字段内容变化时,需要手动触发Command的状态更新,确保按钮能正确启用:
// 在ViewModel的属性setter中添加触发逻辑 private UitvaartLeider _uitvaartLeider; public UitvaartLeider UitvaartLeider { get => _uitvaartLeider; set { _uitvaartLeider = value; OnPropertyChanged(); // 触发SaveCommand的CanExecute状态更新 (SaveCommand as RelayCommand)?.RaiseCanExecuteChanged(); } }
内容的提问来源于stack exchange,提问作者PatrickStel
相关产品推荐
相关产品推荐

