ValueConverter по умолчанию для класса в WPF - PullRequest
1 голос
/ 07 марта 2009

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

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

Я хочу привязать значения текстовых полей и т. Д. (UIElements в целом) к определенному методу в DataContext формы. Метод выглядит так:

public void GetValue(string name)

где имя - это «путь» в форме «узел / подузел / подузел». Я думал об использовании ValueConverter для привязки, и до сих пор это работало довольно хорошо.

Мое связующее выражение выглядит так:

{Binding Path=Localization, Converter={StaticResource LocalizationConverter}, ConverterParameter=PrismBreak/Shell.xaml/New}

Я думаю, что это обязательное выражение, хотя и выполняет свою работу, вроде как взорвано, чтобы использовать его для каждого отдельного элемента UIE. Поэтому я подумал, можно ли определить ValueConverter по умолчанию для определенного типа (-> всякий раз, когда этот тип связан с тем местом, где используется ValueConverter).

Возможно ли это в WPF?

Если это невозможно, есть ли другой хороший способ привязки к методу с динамическими параметрами?

Заранее спасибо и наилучшими пожеланиями,

Chris

1 Ответ

3 голосов
/ 08 марта 2009

Предписанный способ сделать локализацию для WPF - создать локализованный BAML в спутниковых сборках; это достигается добавлением присоединенного свойства x: Uid к элементам, которые вы хотите локализовать. В MSDN есть хороший раздел WPF Globalization and Localizatio n, описывающий методы.

Другим подходом, который я бы предложил, было бы создание статического типа «Словарь локализации» и реализация ICustomTypeDescriptor для перенаправления привязок входящих свойств к строкам в вашем словаре. Вы можете сделать что-то вроде этого:

<Button Content="
    {Binding Source={x:Static local:MyStaticType.Localization}, 
             Path=HelloButtonTitle}" /> 

И вы могли бы продолжать использовать существующие технологии, такие как сборки RESX + Satellite.

...