WPF привязка данных / проверка для URI? - PullRequest
0 голосов
/ 26 октября 2008

Моя текущая настройка связывает свойство Text моего TextBox с определенным Uri объектом. Я хотел бы использовать встроенную проверку WPF для обнаружения недопустимых URI и продолжить с этого момента. Но это не похоже на работу?

Я бы предположил, что будет выдано исключение, если я введу, например, "aaaa" в качестве URI. Таким образом, запускает мою текущую настройку, которая должна обнаруживать исключения примерно так:

<TextBox Grid.Column="1" Name="txtHouseListFile" DockPanel.Dock="Right" Margin="3">
    <TextBox.Text>
        <Binding Source="{StaticResource Settings}" Path="Default.HouseListFile" Mode="TwoWay">
            <Binding.ValidationRules>
                <ExceptionValidationRule />
            </Binding.ValidationRules>
        </Binding>  
    </TextBox.Text>
</TextBox>

Тогда я мог бы представить, что я могу проверить различные свойства проверки, например, так?

Validation.GetHasError(this.txtHouseListFile)

Но, похоже, это не работает. Может быть, это не вызывает исключения при попытке конвертировать? Или, может быть, мои настройки неверны? Исправления к любому из них были бы велики.

Ответы [ 2 ]

1 голос
/ 29 октября 2008

Вы можете попробовать создать наше собственное ValidationRule (наследовать от ValidationRule). В этом классе переопределите Validate (...) и попробуйте создать объект URI и перехватить исключения. В перехвате просто установите для e.Message сообщение об исключении.

(Я не слишком уверен, каков ваш источник привязки. Это URI-объект или строка?)

0 голосов
/ 01 ноября 2008

ОК, думаю, я знаю, что происходит. Привязка не знает, как преобразовать строку в объект URI (поскольку свойство textbox Text является строкой). Вам нужен конвертер, чтобы помочь ему.

Попробуйте это: Создайте класс конвертера (унаследованный от IValueConverter), который:

  • преобразовать строку в Uri с помощью конструктора Uri
  • преобразовать Uri в строку (используя один из нескольких получателей)

Поместите свой конвертер в Связывание. Затем конвертер сгенерирует исключение в конструкторе Uri, и ваш ExceptionValidationRule его поймает.

Смотрите здесь , чтобы узнать, как использовать конвертер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...