DataGrid在运行时的本地化

时间:2012-08-23 08:02:44

标签: wpf datagrid localization

我在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内容?

1 个答案:

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

  ...
}