Преобразователь значений по умолчанию для класса в WPF

StackOverflow https://stackoverflow.com/questions/622117

  •  05-07-2019
  •  | 
  •  

Вопрос

Я как раз собираюсь начать свой новый проект и в настоящее время оцениваю некоторые методы локализации, модульности и т.д.

У меня есть (по крайней мере, на мой взгляд) довольно хороший подход к локализации, но сейчас я изо всех сил пытаюсь найти хорошее решение для привязки данных.

Я хочу привязать значения текстовых полей и т.д.(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 +.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top