我在Christians Mosers Wpf tutorial中使用MarkupExtension本地化。 到目前为止,一切都很好。
唯一不起作用的是运行时DataGrid内容的本地化。 例如,我有一个绑定到observableCollection的数据网格。它包含一个显示功能名称的TextColumn。功能名称应该是可本地化的。
<DataGridTextColumn Header="{t:Translator Feature}" IsReadOnly="True"
Binding="{Binding Path=Feature, Converter={Utilities:EnumDescriptionConverter}, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
Feature是一个枚举值,我使用转换器从中检索描述。转换器也进行翻译。
public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is Enum)
{
var myEnum = (Enum)value;
string description = GetEnumDescription(myEnum);
return TranslationManager.Instance.Translate(description);
}
return value;
}
问题是转换器仅在第一次填充数据网格时被调用。当前文化更改时,数据网格内容永远不会更改。
每当当前语言发生变化时,如何才能更新datagrid内容?
答案 0 :(得分:0)
我通过让我的ViewModel监听LanguageChangedEvents来解决它。事件处理程序在(数据网格的)基础数据视图上调用Refresh(),并触发PropertyChangedEvents。
private void OnLanguageChanged(object sender, EventArgs args)
{
//call refresh in order to update the translations within the list
IEditableCollectionView list = (ListCollectionView) this.FeaturesView;
if (list.IsEditingItem) list.CommitEdit();
if (list.IsAddingNew) list.CommitNew();
this.FeaturesView.Refresh();
OnPropertyChanged(FeaturesViewProperty);
...
}