如何在语言更改时切换DataGridComboBoxColumn切换项?

时间:2018-08-23 12:20:43

标签: c# globalization datagridcomboboxcolumn

在我的应用程序中,我有一个带有DataGridComboBoxColumn的DataGrid,它显示了从枚举转换成的特定于语言的条目

<DataGridComboBoxColumn SelectedValueBinding="{Binding myProperty
, Converter={StaticResource enumValueConverter}
, UpdateSourceTrigger=PropertyChanged}">

用户可以随时切换应用语言。 ItemsSource中的DataGridComboBoxColumn是在初始化我的UserControl以及每当切换语言时通过程序设置的:

((DataGridComboBoxColumn)myDataGrid.Columns[8]).ItemsSource = // list of cultureinfo specific strings;

显示UserControl并随后切换语言时, 将ItemsSource设置为会使所有基础myViewModelClass对象的myProperty设置为空。 (我能理解为什么:新语言的组合框条目与旧语言中选择的myProperty值不匹配。)

为避免这个问题,我实现了这段代码

if (((DataGridComboBoxColumn)myDataGrid.Columns[8]).ItemsSource != null) // i.e. UserControl is displayed and the language is then switched
{
    // preserve the myProperty values
    Dictionary<myViewModelClass, myEnum> shwa = new Dictionary<myViewModelClass, myEnum>();
    foreach (myViewModelClass sh in myObservableCollection)
    {
        shwa.Add(sh, sh.myProperty);
    }

    // reset the ItemsSource with language specific values
    ((DataGridComboBoxColumn)myDataGrid.Columns[8]).ItemsSource = // list of cultureinfo specific strings;

    // repair the myProperty 
    for (Dictionary<myViewModelClass, myEnum>.Enumerator enu = shwa.GetEnumerator();enu.MoveNext() ;)
    {
        KeyValuePair<myViewModelClass, myEnum> kvp = enu.Current;
        kvp.Key.myProperty = kvp.Value;
    }

是否有更好的解决方案(类似于WPF / XAML)?

0 个答案:

没有答案