首页 > 解决方案 > WPF OnPropertyChanged - 通知另一个 VM

问题描述

我有 2 个用户控件的小应用程序。第一个包含登录表单,第二个 UserControl 显示经过身份验证的用户。但在第二个用户控件中,我无法显示 AuthenticatedUser。我 viewmodel 是 AuthenticatedUser 的值,但在 xaml 中不是。这是我的代码:

主窗口.xaml

<local:Login/>
<local:Test/>

登录.xaml

<TextBox Text="{Binding Username, UpdateSourceTrigger=LostFocus}"/>
<Button Content="LOGIN" Command="{Binding LoginCommand}"/>
AFTER LOGIN BUTTON CLICK HERE IS VALUE
<TextBlock Text="{Binding AuthenticatedUser}"/>

登录VM.cs

class LoginVM : BaseVm
{
    private string _username;
    public string Username
    {
        get => _username;
        set
        {
            _username = value;
            OnPropertyChanged(nameof(Username));
        }
    }

    public Command LoginCommand { get; }

    public LoginVM()
    {
        LoginCommand = new Command(x =>
        {
            var principal = Thread.CurrentPrincipal as Principal;
            principal.Identity = new Identity(Username);
            OnPropertyChanged(nameof(AuthenticatedUser));
        });
    }
}

基础虚拟机

class BaseVm : INotifyPropertyChanged
{
    public string AuthenticatedUser => (Thread.CurrentPrincipal as Principal).Identity.Name;

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}

测试.xaml

 <TextBlock Text="USER: "/>

 AFTER LOGIN BUTTON CLICK HERE IS NOT VALUE
 <TextBlock Text="{Binding AuthenticatedUser}"/> 

TestVm.cs

class TestVm : BaseVm
{
}

如何通知其他用户控件?感谢您的建议

标签: c#wpfmvvm

解决方案


推荐阅读