在我的应用程序中,我有一个带有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)?