gpt4 book ai didi

c# - 静态属性/ViewModel(C#、WinRT)

转载 作者:太空宇宙 更新时间:2023-11-03 11:04:50 28 4
gpt4 key购买 nike

我的 WinRT 项目中有一个静态 UserAccount 类。此类包含有关当前登录用户的各种静态属性(如用户名、电子邮件地址...)。我需要使用绑定(bind)从任何 View 获得此信息(例如 - 我想显示个性化消息 “欢迎,{0}” - 传递用户名 - 在应用程序的一个页面上),但我需要确定满足这些条件:

  1. 以正确的 MVVM 模式方式实现它
  2. 当用户通过“设置” super 按钮运行应用时切换到另一个帐户时,绑定(bind)字段(如消息等)应自动更新为新数据。

我认为可以创建类似全局 UserAccountViewModel 的东西,这将是具有所需属性的经典 View 模型,并且可以从静态 UserAccount 手动更新 类,但这似乎不是最好的解决方案。

你能想出更好的方法来完成这个并满足上面列出的两个条件吗?

非常感谢任何帮助。

编辑:类似的情况发生在我需要的另一个类 - NetworkStatus - 它具有 IsInternetAvailable 以了解应用程序是否已连接,但我需要使用此 bool 值绑定(bind)到应用程序中不同按钮的 IsEnabled 属性。

最佳答案

s创建一个所有其他 ViewModel 继承自的 Base ViewModel。您现在不必将其设为静态以实现所有访问,因为每个 ViewModel 都已经可以访问它。在绑定(bind)中,您也没有指定 base.Property

包含属性填充此数据的功能的抽象 View 模型。

public abstract class UserAccountViewModel : ObservableObject, IViewModel
{
//use private member and do a RaisePropertyChanged("Username")
public string Username { get; set; }

private void GetUserInformation()
{
Username = BusinessLogic.GetUsername();
}
}

现在让您的 ViewModel 继承它

public class OtherViewModel : UserAccountViewModel { }

并且您可以直接绑定(bind)到 OtherView.xaml 中的父属性:

<TextBlock Text="{Binding Path=Username, Mode=OneWay}" />

BusinessLogic 类具有用于检索用户名的静态 GetUsername() 方法。为了不重复工作量,只检索一次但提供很多。因此,在调用 Refresh 概念之前,您会将其静态存储在业务逻辑中。

或者,您可以使用一个 ViewModel 来收集您想要的数据,然后使用 EventAggregator 或任何您想将其传递给需要它的所有其他 ViewModel。这将消除静态业务逻辑的想法。使用 Prism 的 EventAggregator 很棒,ViewModels 订阅和一个(或多个)发布事件并包含与之一起使用的对象/数据。因此,这些其他 ViewModel 可以立即订阅和接收,或者您可以进行双向通信并让 ViewModel 进行“请求”,然后获得“响应”。不确定您是否可以利用它,或者必须自己动手,但这个概念是有效的,并且至少可以通过传递 UserInfo 对象的事件来完成。

关于c# - 静态属性/ViewModel(C#、WinRT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16277918/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com