c# - 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
{
}
如何通知其他用户控件?感谢您的建议
解决方案
推荐阅读
- public-key-encryption - 如何从给定的公钥在 gpg 中创建公钥文件
- docker - 如何在 docker-compose 文件中获取和设置随机服务端口作为 env var?
- javascript - TypeError:参数 1 对 URL.createObjectURL 的任何 1 参数重载都无效
- java - 使用反射更改 JFrame 中私有成员的值
- java - 为我的 elasticsearch 插件配置和设置 LDAP 身份验证服务器
- active-directory - 限制网络上自定义主目录的大小
- javascript - x 和 y 轴未显示在散点图中 d3.js
- asp.net - 如何更改 Crystal Report DatePicker 日期格式?
- php - 使用 laravel 5.6 从 s3 删除文件
- php - PHP使用str_replace将数字更改为字符串而不会混淆