我有一个相当简单的案例,但我无法得到正确的解决方案。
在我的MVVM应用程序上,我希望我的MainView
(附加到MainViewModel
)通过绑定显示当前用户登录(名称)。
User
类是实施INPC的POCO。 CurrentUser
实例是我的应用程序控制器AppController
的静态属性。 LogOn
property是我想在MainView
中显示的字符串。
如此简短的版本:我想在AppController.CurrentUser.LogOn
中绑定MainView
。
我尝试了几种静态绑定方式(比如在this article中),我无法让它工作。
有任何想法让这项工作?
感谢。
修改
问题是初始绑定有效,但是当我将另一个User对象设置为当前用户时,即使AppControl.CurrentUser
属性引发静态事件PropertyChanged,也不会刷新LogOn属性。
编辑2
我尝试了@Henk Holterman解决方案(来自ViewModel的echo属性),并调试它我找到了诀窍:事实上,问题是竞争条件:我的ViewModel通过EventAggregator提升UserChanged事件,然后引发PropertyChanged,但它太快了,当事件提升时,AppController上的对象引用没有改变。
非常感谢你的帮助!
答案 0 :(得分:1)
您的AppController类可能如下所示:
public class User
{
public string LogOn { get; set; }
}
public static class AppController
{
public static event PropertyChangedEventHandler StaticPropertyChanged;
private static User currentUser;
public static User CurrentUser
{
get { return currentUser; }
set
{
currentUser = value;
StaticPropertyChanged?.Invoke(null,
new PropertyChangedEventArgs(nameof(CurrentUser)));
}
}
}
然后Binding可能会这样写:
<TextBlock Text="{Binding Path=(local:AppController.CurrentUser).LogOn}"/>