Silverlight ValidatesOnException локализация сообщений по умолчанию - PullRequest
7 голосов
/ 13 сентября 2011

В моем приложении silverlight 4 MVVM я могу переключать языки во время выполнения:

public void SetLanguage(string language)
{
    var culture = new CultureInfo(language);
    Thread.CurrentThread.CurrentUICulture = culture;
    Thread.CurrentThread.CurrentCulture = culture;
    // ...
}

Для входных данных я просто добавил «ValidatesOnException = true» в случае проблем с преобразованием, и он выполняет свою работу.Но сообщение об исключении по умолчанию соответствует культуре моей ОС, а не выбранной вручную.

В этой теме о локализации сообщений об исключениях идея состоит в том, чтобы изменить CurrentCulture и CurrentUICulture, чтосделал.Так что я застрял.

Что я могу сделать?

Спасибо:)

Редактировать: я пытался использовать пользовательский конвертер с пользовательским исключением в конвертацииметод для проверки ввода пользователя.Проблема, исключение в методе convertback НЕ перехватывается validatesOnException, оно разрывает приложение.

Редактировать 2: чтобы уточнить -> если у меня есть десятичное свойство, связанное с текстовым полем, и я ввожу "blabla"в этом текстовом поле я хочу видеть, что есть проблема, и я хочу, чтобы сообщение было в локали времени выполнения, а не в локали ОС.Я не могу вызвать исключение в своем установщике свойств, потому что никогда не получаю, конвертер по умолчанию вызывает свое собственное исключение до этого.

Надеюсь, это понятно.Если я могу помочь вам, пожалуйста, не стесняйтесь:)

Ответы [ 3 ]

0 голосов
/ 15 сентября 2011

Один из возможных подходов - изменить тип свойства на string, даже если за ним сохраняется значение decimal. Получатель вызовет ToString для сохраненного значения decimal, и установщик выполнит преобразование обратно из string в decimal, используя Decimal.Parse или подобное. Этот подход означает, что вы должны выполнять преобразование типов самостоятельно, но, по крайней мере, он дает вам немного больше контроля.

Ваш установщик может выдавать исключения, указывающие на ошибки проверки. Кроме того, вы можете использовать один из интерфейсов IDataErrorInfo и INotifyDataErrorInfo , чтобы отобразить ошибку проверки. Эта страница содержит пример использования IDataErrorInfo, а эта содержит пример использования INotifyDataErrorInfo.

0 голосов
/ 22 сентября 2011

Вы можете использовать пользовательскую реализацию ValidationRule и добавить в коллекцию Binding.ValidationRules .Вы должны будете очистить коллекцию раньше (я не уверен, как это сделать XAML) и добавить это правило (как это сделать, описано на одной из страниц MSDN).

Этот класс имеет Validate метод, в котором вы можете выполнить проверку и вернуть нужное сообщение об ошибке.

0 голосов
/ 15 сентября 2011

Возможно, вы не меняете культуру с самого начала.

Я предлагаю вам попробовать подход, приведенный в первом ответе по этой ссылке:

Изменение культуры приложения Silverlight

...