WPF C# MVVM数据库查询后无法更新绑定问题求助
问题分析与解决方法
核心错误点
1. XAML绑定路径错误
用户控件的TextBox绑定路径写为uitvaartLeiderModel.Uitvaartnummer,但OverledeneViewModel对外公开的属性是UitvaartLeiderInfo,而非私有字段_uitvaartLeiderModel,且WPF绑定区分大小写,导致UI无法找到正确的绑定源。
2. 数据模型未实现INotifyPropertyChanged
OverledeneUitvaartleiderModel没有实现INotifyPropertyChanged接口,直接修改模型属性值时,无法通知UI更新数据——WPF的绑定更新完全依赖该接口的PropertyChanged事件。
3. 模型属性更新逻辑问题
在LoadCurrentUitvaartLeider方法中,直接修改UitvaartLeiderInfo的子属性而非替换整个模型对象。即使UitvaartLeiderInfo属性有OnPropertyChanged通知,修改子属性也不会触发该事件,UI无法感知变化。
具体修复步骤
修复XAML绑定路径
将用户控件中的TextBox绑定路径改为正确的公开属性名,同时移除错误的BindingGroup属性:
<TextBox x:Name="input_UitvaartNrOverledene" Text="{Binding Path=UitvaartLeiderInfo.Uitvaartnummer, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" TabIndex="1" VerticalContentAlignment="Center" HorizontalAlignment="Left" Margin="204,14,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="301" Height="31" FontSize="16" SelectionBrush="#FFD70000" FontFamily="Arial"/>
让数据模型实现INotifyPropertyChanged
修改OverledeneUitvaartleiderModel,继承已有的ViewModelBase来实现属性变更通知:
public class OverledeneUitvaartleiderModel : ViewModelBase { private Guid _uitvaartId; private Guid _personeelId; private string _personeelNaam; private string _uitvaartnummer; public Guid UitvaartId { get => _uitvaartId; set { _uitvaartId = value; OnPropertyChanged(nameof(UitvaartId)); } } public Guid PersoneelId { get => _personeelId; set { _personeelId = value; OnPropertyChanged(nameof(PersoneelId)); } } public string PersoneelNaam { get => _personeelNaam; set { _personeelNaam = value; OnPropertyChanged(nameof(PersoneelNaam)); } } public string Uitvaartnummer { get => _uitvaartnummer; set { _uitvaartnummer = value; OnPropertyChanged(nameof(Uitvaartnummer)); } } }
优化模型更新逻辑(可选,更符合MVVM规范)
直接替换整个UitvaartLeiderInfo对象,既触发ViewModel的属性变更通知,逻辑也更简洁:
public void LoadCurrentUitvaartLeider(string uitvaartNummer) { var uitvaarLeiderResult = overledeneRepository.GetUitvaarleiderByUitvaartId(uitvaartNummer); UitvaartLeiderInfo = uitvaarLeiderResult ?? new OverledeneUitvaartleiderModel(); }
如果坚持修改子属性,只要模型已实现INotifyPropertyChanged,UI也会正常更新,两种方式均可行。
内容的提问来源于stack exchange,提问作者PatrickStel
相关产品推荐
相关产品推荐

