MVVM本地化 - View中与ViewModel中的本地化资源?

时间:2013-12-12 16:07:30

标签: wpf mvvm localization

本地化是视图还是ViewModel的责任?最初,我认为它显然属于VM,因为它只是需要由视图显示的数据。究竟需要显示的内容对视图并不重要。此外,我已经获得了XAML比ViewModel代码更脆弱的经验。但在今天的讨论中,有些人坚信本地化是观点的责任。

以下是我在两个版本中看到的一些优点:

将它们放入视图的优点:

  • ViewModel无视本地化
  • 您可以在XAML中看到资源键
  • 少代码

将它们放入ViewModel的优点:

  • View无视本地化
  • 除了ViewModel
  • 之外,View不需要知道任何事情
  • 组合和创建更复杂的字符串更容易。

在使用MVVM模式的Wpf应用程序中,可本地化的元素(字符串资源)是应该进入视图还是进入viewmodel?为什么?这两种方法有哪些其他优点和缺点?

评论后的一些背景信息:假设Localization-backend基于resx(不是LocBaml)。此外,假设有一个框架(View-Variant)可以用字符串透明地替换视图中的resource-id,或者(ViewModel-Variant)会自动为ViewModel上的本地化属性生成INotifyPropertyChanged事件。

但是,我主要关注的是为什么从概念或清洁代码的角度来看它更好,无视后端。

2 个答案:

答案 0 :(得分:1)

要在WPF应用程序设计中正确实现本地化,您需要遵循设置过程,因此实际上并没有像您所建议的那样做出选择。一方面。您需要在所有UI控件上设置Uid属性,因此在视图模型中显然无法完成。此外,将所有本地化的string值放入不同的dll中是很常见的,因此,在视图模型中也不能这样做。

我没有时间准确描述如何立即执行此操作。相反,有关WPF中本地化的完整详细信息,请参阅MSDN上的WPF Globalization and Localization Overview页面。

答案 1 :(得分:1)

某些资源属于View,有些资源属于ViewModel。我不认为这个问题有严格的规定。用你自己的判断。就个人而言,我与View共享ViewModel的资源文件。