1

我在Christians Mosers Wpf 教程中使用带有 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;
}

问题是转换器仅在第一次填充数据网格时才被调用。当当前区域性改变时,数据网格内容永远不会改变。

每次当前语言更改时,如何让数据网格内容更新?

4

1 回答 1

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);

  ...
}
于 2013-09-12T09:35:24.247 回答