使用C#中的外部文件和MVVM模式在运行时更改语言

问题描述 投票:0回答:2

我的场景:

具有SplitView的MainWindow和几个页面,每个页面包含标签,按钮和选项卡。我正在使用MVVM模式,现在我希望能够在运行时使用例如一个组合框。语言密钥应从外部文件中读取,例如.mdb文件,这是因为编译后应该可以更改某些按钮的描述。

[我大部分时间已经阅读很多东西,他们使用资源文件或不遵循MVVM模式。我找到的最接近的是this

这里我面临四个问题:

  1. 他们使用MainWindow的代码来设置DataContext,我的菜单已经使用我的代码了:/
  2. 我的标签/按钮中的文本应该在几页上更改,我该怎么做?
  3. 我在ViewModel中生成菜单的某些内容,在这里如何使用文件中的语言键?我不能像在XAML中那样绑定它们?
  4. 没有选择使用哪种语言设置的选项。 (一旦我知道这个概念完全值得追求,我也许就能弄清楚)

我是MVVM和C#的新手,所以我对MVVM模式的想法还不是很熟悉,但是希望您能帮助我找到解决方案:)

c# wpf mvvm
2个回答
0
投票

请再次阅读链接的文章,看来您不理解其原理和原理。

他们使用MainWindow的代码来设置DataContext,我的菜单已经使用我的代码了:/

您不必设置DataContext。 xaml中的绑定在视图模型中利用索引器。您可以将索引器添加到视图模型中,或者(更好)仅添加属性返回的StringResourceReader实例,然后所有可本地化的绑定都将变为

<TextBlock ... Text="{Binding PropertyName[TESTSTRING]}"/>

我的标签/按钮中的文本应该在几页上更改,我该怎么做?

请参见上文。所有视图模型都应具有索引器或属性。

或者,您可以在某处具有bind to it静态属性,而不用更改每个视图模型。但这会使xaml中的绑定语法更长。

我在ViewModel中生成菜单的某些内容,在这里如何使用文件中的语言键?我不能像在XAML中那样绑定它们?

在后面的代码中,直接调用rm.GetString(name)。>>

没有选择使用哪种语言设置的选项。 (一旦我知道这个概念完全值得追求,我也许就能弄清楚)

_fileName是语言。不同的文件是不同的本地化。由您决定如何组织哪种文件是哪种语言。例如。您可以在文件名中的某处使用two letters来更轻松地识别语言。


0
投票

WPF的资源字典对此非常有用。

© www.soinside.com 2019 - 2024. All rights reserved.