使用 Prism 在 WPF 应用程序中使用 RESX 文件
Use RESX file in WPF application with Prism
我正在与 WPF/Prism 合作一个项目。该应用程序具有不同的模块,其中一个模块可以更改 resx 对象的区域性。这工作正常,每个加载的模块都会显示翻译后的文本。
如果已经加载了任何模块,则不会更新文本。首先,我尝试了 x:Static
的方法,但很快意识到静态值对我的问题没有帮助。现在我在我的视图模型中实现了一个只获取 属性,returns 本地化字符串。
public string UserDetailsLabel => Messages.UserDetailsLabel;
<TextBlock Text="{Binding UserDetailsLabel, Mode=OneWay, NotifyOnSourceUpdated=True}"/>
但是,我不知道在哪里告诉 WPF(或 Prism)文化已经改变并更新显示的值。更改文化的模块在 Messages
上设置 Culture
属性(在 Messages.Designer.cs
中生成)。
有没有办法通知值已更改?
Is there a way to notify that the value changed?
实施 INotifyPropertyChanged 并为数据绑定 UserDetailsLabel
属性.
引发 PropertyChanged
事件
这是通知 WPF 源值已更改的方式。
在多模块 Prism 应用程序的上下文中,例如,您可以使用事件聚合器来引发每个视图模型处理的事件,方法是为需要的所有数据绑定属性引发 PropertyChanged
事件将在视图中刷新。
我通过在 UserControl
xaml 定义中附加 Loaded
事件解决了我的问题。然后视图要求我的视图模型更新 UI。
然后视图模型调用 RaisePropertyChanged(nameof(UserDetailsLabel))
并更新视图。
// UserListView.xaml
<UserControl ... Loaded="UserListView_OnLoaded">...</UserControl>
// UserListView.xaml.cs
private void UserListView_OnLoaded(object sender, RoutedEventArgs e) {
var dataContext = (IUserListViewModel) DataContext;
dataContext.RefreshUI();
}
// UserListViewModel.cs
public void RefreshUI() {
RaisePropertyChanged(nameof(IUserListViewModel));
}
我正在与 WPF/Prism 合作一个项目。该应用程序具有不同的模块,其中一个模块可以更改 resx 对象的区域性。这工作正常,每个加载的模块都会显示翻译后的文本。
如果已经加载了任何模块,则不会更新文本。首先,我尝试了 x:Static
的方法,但很快意识到静态值对我的问题没有帮助。现在我在我的视图模型中实现了一个只获取 属性,returns 本地化字符串。
public string UserDetailsLabel => Messages.UserDetailsLabel;
<TextBlock Text="{Binding UserDetailsLabel, Mode=OneWay, NotifyOnSourceUpdated=True}"/>
但是,我不知道在哪里告诉 WPF(或 Prism)文化已经改变并更新显示的值。更改文化的模块在 Messages
上设置 Culture
属性(在 Messages.Designer.cs
中生成)。
有没有办法通知值已更改?
Is there a way to notify that the value changed?
实施 INotifyPropertyChanged 并为数据绑定 UserDetailsLabel
属性.
PropertyChanged
事件
这是通知 WPF 源值已更改的方式。
在多模块 Prism 应用程序的上下文中,例如,您可以使用事件聚合器来引发每个视图模型处理的事件,方法是为需要的所有数据绑定属性引发 PropertyChanged
事件将在视图中刷新。
我通过在 UserControl
xaml 定义中附加 Loaded
事件解决了我的问题。然后视图要求我的视图模型更新 UI。
然后视图模型调用 RaisePropertyChanged(nameof(UserDetailsLabel))
并更新视图。
// UserListView.xaml
<UserControl ... Loaded="UserListView_OnLoaded">...</UserControl>
// UserListView.xaml.cs
private void UserListView_OnLoaded(object sender, RoutedEventArgs e) {
var dataContext = (IUserListViewModel) DataContext;
dataContext.RefreshUI();
}
// UserListViewModel.cs
public void RefreshUI() {
RaisePropertyChanged(nameof(IUserListViewModel));
}