本地化是视图还是ViewModel的责任?最初,我认为它显然属于VM,因为它只是需要由视图显示的数据。究竟需要显示的内容对视图并不重要。此外,我已经获得了XAML比ViewModel代码更脆弱的经验。但在今天的讨论中,有些人坚信本地化是观点的责任。
以下是我在两个版本中看到的一些优点:
将它们放入视图的优点:
将它们放入ViewModel的优点:
在使用MVVM模式的Wpf应用程序中,可本地化的元素(字符串资源)是应该进入视图还是进入viewmodel?为什么?这两种方法有哪些其他优点和缺点?
评论后的一些背景信息:假设Localization-backend基于resx(不是LocBaml)。此外,假设有一个框架(View-Variant)可以用字符串透明地替换视图中的resource-id,或者(ViewModel-Variant)会自动为ViewModel上的本地化属性生成INotifyPropertyChanged事件。
但是,我主要关注的是为什么从概念或清洁代码的角度来看它更好,无视后端。
答案 0 :(得分:1)
要在WPF应用程序设计中正确实现本地化,您需要遵循设置过程,因此实际上并没有像您所建议的那样做出选择。一方面。您需要在所有UI控件上设置Uid
属性,因此在视图模型中显然无法完成。此外,将所有本地化的string
值放入不同的dll中是很常见的,因此,在视图模型中也不能这样做。
我没有时间准确描述如何立即执行此操作。相反,有关WPF中本地化的完整详细信息,请参阅MSDN上的WPF Globalization and Localization Overview页面。
答案 1 :(得分:1)
某些资源属于View,有些资源属于ViewModel。我不认为这个问题有严格的规定。用你自己的判断。就个人而言,我与View共享ViewModel的资源文件。