使用MVVM和WPF登录-登录对象必须在其他窗口中使用。(全球化)

使用MVVM和WPF登录-登录对象必须在其他窗口中使用。(全球化),wpf,mvvm,login,globalization,Wpf,Mvvm,Login,Globalization,我对WPF和MVVM模式非常陌生。我甚至没有使用windows的经验 我已经创建了简单的登录窗口 _Login.xaml、LoginViewModel.cs _Dashboard.xaml、DashboardViewModel.cs 成功登录后-(在登录时,我们还将选择语言) 我正在仪表板窗口中显示用户名和所选语言 我编写了如下代码: public partial class App : Application { protected override void OnStartup(St

我对WPF和MVVM模式非常陌生。我甚至没有使用windows的经验

我已经创建了简单的登录窗口

_Login.xaml、LoginViewModel.cs

_Dashboard.xaml、DashboardViewModel.cs

成功登录后-(在登录时,我们还将选择语言)

我正在仪表板窗口中显示用户名和所选语言

我编写了如下代码:

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        try
        {
            var login = new Login();
            var loginVM = new LoginViewModel();
            Dashboard main = null;
            loginVM.LoginCompleted += (sender, args) =>
            {
                DashboardViewModel dvModel = new DashboardViewModel(loginVM);
                main = new Dashboard();
                main.DataContext = dvModel;
                main.ShowDialog();
                login.Hide();
            };
            login.DataContext = loginVM;
            login.ShowDialog();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
在仪表板窗口中,它成功显示用户名和语言

但我的问题是,我想在dashboard codebehind中使用这两个(用户名和语言)属性,根据语言和其他xaml文件或其他ViewModel更新布局。怎么做呢

从技术上讲,我希望在所有viewmodels中使用Loginviewmodel对象

根据所选语言,我要更新布局


注意:这种登录方式好吗?MVVM模式中是否有全球化的替代方案?

使用ViewModel登录完全有效。我可能会在您的loginVM中创建一个令牌,根据您的需要在系统中传递。该标记应该从主视图模型(DashboardViewModel?)传递到其他视图模型的构造函数中。这可以通过使用任何合适的IoC容器来解决

对于全球化/本地化,我将使用资源(在附属组件中)。我们已经对各种事情进行了实验,发现我们不喜欢在使用LocBaml时到处添加WPF UUID。存储翻译是一个数据库,它很快就成为了一个性能瓶颈(即使在批量加载时也是如此)。这确实需要你找到你的标签等资源经理,但在我看来,这是值得的

请看一看,这是一个很好的扩展,它使您能够简单地编写:

<TextBlock Text="{Resx MyText}"/>
在loginVM中,只需将必要的值存储在静态类中。这可以在任何需要的地方访问。这并不像前面的方法那样“正确”,但它比必须将用户名传递到应用程序中的每个ViewModel更为实用


尽管如此,我还是建议通过IoC容器进行注入。

您能给我举个例子,说明最后一种在mvvm模式中对用户名和语言应用静态属性的方法吗?我们已经这样做了,甚至自己做了绑定。本地化在WPF中是一团糟:(.我想知道这些年来我在WPF和SL fauna中用了多少方法和时间来处理这个问题。尽管如此,请注意你的帖子。呃,“编译”卫星程序集只是为了一些语言更改,他们在想什么?:)@Stian:有时这不是最好的解决方案,但最糟糕的是@特罗尔斯拉尔森:没错;)但关于WPF/SL动物群中的本地化。。我只能说这是一个笑话:)将locbaml与xbap-ouch一起使用并不能让我开始,特别是当您处理大型LOB应用程序时。每次需要一些语言更改时,都需要一个完整的构建和部署。您好,这里不适合挑剔的PickyNose先生,但您永远不应该在catch块中重新引用您的前男友,只有throw更糟糕,而不仅仅是在一个空的try-catch块中消耗异常。而是抛出一个新的异常(“未能初始化loginscreen或其他”,ex);当谈到WPF和SL动物群的全球化时,我们正在绞尽脑汁寻找一些老生常谈的方法来处理这个问题,不同平台的情况有所不同。见下面的@Troels-Larsens帖子。
public static class RuntimeInfo {
    public static string UserName { get; set; }
    public static CultureInfo UserCulture { get; set; }
}