1
我正在使用像Christians Mosers Wpf tutorial中的MarkupExtension的本地化。 到目前爲止,一切工作都很好。DataGrid在運行時本地化
唯一不起作用的是運行時DataGrid內容的本地化。 例如我有一個綁定到observableCollection的數據網格。它包含一個顯示功能名稱的TextColumn。功能名稱應該是可本地化的。
<DataGridTextColumn Header="{t:Translator Feature}" IsReadOnly="True"
Binding="{Binding Path=Feature, Converter={Utilities:EnumDescriptionConverter}, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
該功能是一個枚舉值,我用轉換器檢索它的描述。轉換器也做翻譯。
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第一次被填充時被調用。當前文化發生變化時,數據網格內容不會改變。
如何在每次當前語言更改時更新數據網格內容?
在Christians Mosers Wpf教程的評論中,有人提到動態語言切換在使用轉換器時不起作用的事實。也許你可以欺騙一點:使用multibinding從另一個屬性獲取PropertyChanged? – franssu
你的意思是像一個觸發器? – tabina
我的意思是:假設屬性A的綁定確實更新;物業B沒有。您可以使用多重綁定(A + B),只要確保綁定到B將會被更新(您可以掛鉤到A PropertyChanged事件)。這不是真正的觸發器,但是當A將被更新時,它將觸發B的更新。 – franssu