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

使用Microsoft MVVM模板开发桌面购物应用时MemberName源属性未更新问题

问题根因及修复方案

1. XAML绑定路径错误

当前TextBox的绑定逻辑直接查找ViewModel层的MemberName属性,但实际上MemberName是ViewModel中LogMember对象的下属属性,绑定路径层级不匹配,导致无法关联到正确的源属性。
修复后的TextBox绑定代码:

<TextBox Text="{Binding Path=LogMember.MemberName, Mode=TwoWay, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" 
         x:Name="TextBoxAddMembername"  
         Height="27" 
         TextWrapping="Wrap" />

2. 登录按钮点击事件错误实例化ViewModel

你在BttnLogin_Click方法中重新new了一个LogInViewModel对象,这个新实例和界面已经绑定的ViewModel没有关联,就算绑定路径修复后也拿不到界面输入的值,需要直接获取当前窗口绑定的已有ViewModel实例:
修复后的点击事件代码:

private void BttnLogin_Click(object sender, RoutedEventArgs e)
{
    // 直接获取当前窗口绑定的ViewModel实例,不要重新创建
    LogInViewModel logPassword = (LogInViewModel)this.DataContext;
    string dbPassword = logPassword.ObtainPassword();
       
    if (dbPassword.Equals(Typepass.Password.ToString()))
    {
        MainWindow newMainWindow = new MainWindow();
        newMainWindow.Show();
        MessageBox.Show("登录成功");
        this.Close();
    }
    else 
    { 
        MessageBox.Show("登录失败,请重试"); 
    }
}

可选优化说明

当前PasswordBox未实现MVVM绑定,如果要严格遵循MVVM规范可以通过附加属性实现Password的双向绑定,现有后台直接取Typepass.Password的写法也可以正常运行。
另外可以将Window_Loaded方法中的ViewModel局部变量提升为窗口类的全局变量,方便后续业务逻辑调用,不影响现有功能运行。

内容的提问来源于stack exchange,提问作者veldo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:48:05