Преобразователь значений по умолчанию для класса в WPF
Вопрос
Я как раз собираюсь начать свой новый проект и в настоящее время оцениваю некоторые методы локализации, модульности и т.д.
У меня есть (по крайней мере, на мой взгляд) довольно хороший подход к локализации, но сейчас я изо всех сил пытаюсь найти хорошее решение для привязки данных.
Я хочу привязать значения текстовых полей и т.д.(UIElements в целом) к определенному методу в DataContext формы.Метод выглядит следующим образом:
public void GetValue(string name)
где name - это "путь" в форме "узел / подузел /subsubnode".Я думал об использовании ValueConverter для привязки, и до сих пор это получалось довольно хорошо.
Мое обязательное выражение выглядит примерно так:
{Binding Path=Localization, Converter={StaticResource LocalizationConverter}, ConverterParameter=PrismBreak/Shell.xaml/New}
Я думаю, что это выражение привязки, хотя и выполняет свою работу, в некотором роде раздуто для использования для каждого отдельного UIElement.Поэтому я подумал, можно ли определить ValueConverter по умолчанию для определенного типа (--> всякий раз, когда этот тип привязан к чему-либо, используется ValueConverter).
Возможно ли это в WPF?
Если это невозможно, есть ли какой-нибудь другой хороший способ привязки к методу с динамическими параметрами?
Заранее спасибо и с наилучшими пожеланиями,
Крис
Решение
Предписанный способ выполнения локализации для WPF заключается в создании локализованного BAML в сателлитных сборках;это достигается путем добавления x: Жидкость прикрепленное свойство к элементам, которые вы хотели локализовать.Есть хороший Глобализация и локализация WPFn раздел в MSDN, описывающий методы.
Другой подход, который я бы предложил, заключался бы в создании статического типа "Словарь локализации" и реализации ICustomTypeDescriptor ( Пользовательский тип ), чтобы перенаправить входящие привязки свойств к строкам в вашем словаре.Вы могли бы в конечном итоге сделать что-то вроде этого:
<Button Content="
{Binding Source={x:Static local:MyStaticType.Localization},
Path=HelloButtonTitle}" />
И вы могли бы продолжать использовать существующие технологии, такие как спутниковые сборки RESX +.