Я бы предложил использовать файл ресурсов и расширение разметки. В файле ресурсов вы создаете строковые ресурсы и создаете локализованные файлы ресурсов для каждого языка. В расширении разметки вы просто возвращаете значение строки из ресурсов (оно автоматически выберет соответствующий язык из сборки ресурсов спутника для текущей культуры).
Расширение разметки
[MarkupExtensionReturnType(typeof(string))]
public class ResourceString : MarkupExtension
{
[ConstructorArgument("resourceKey")]
public string ResourceKey { get; set; }
public ResourceString(string resourceKey)
{
this.ResourceKey = resourceKey;
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
// Assuming your resource file is named StringResources.resx
return StringResources.ResourceManager.GetString(ResourceKey);
}
}
XAML
<local:ListOfStrings x:Key="columnNameList">
<local:ResourceString ResourceKey="ClientName" />
<local:ResourceString ResourceKey="OrderNumber" />
<local:ResourceString ResourceKey="Date" />
</local:ListOfStrings>
Кстати, вы не можете использовать дженерики в XAML (ну, вы можете использовать в XAML 2009, но это еще не поддерживается в VS) Поэтому вам нужно создать неуниверсальный класс, представляющий список строк:
public class ListOfStrings : List<string> { }