You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 18:24:54