WPF TextBox отдельный источник проверки - PullRequest
0 голосов
/ 09 июля 2010

Я пытаюсь найти решение, позволяющее TextBox показывать и проверять данные из двух разных источников, как показано в этом небольшом примере:

<TextBox Text="{Binding Port.Name}" 
ValidationSource="{Binding Ship.PortFK}"/>

Здесь объект данных Ship содержит свойство, которое функционирует как ForeignКлюч к порту, свойство имеет свои собственные валидаторы.

Я исследовал использование ValidationRules по ссылке ниже, но это только дает мне значение PortFK, в то время как мне нужно свойство с его атрибутами валидации.

http://michlg.wordpress.com/2010/01/29/wpf-custom-validationrule-with-an-additional-parameter/

Кто-нибудь знает решение этой проблемы?

- правка -

Я вижу, что недостаточно хорошо объяснил свою проблему;).

На самом деле тег ValidationSource не существует в .Net или моей собственной программе, так как я не знаю, как создать такую ​​конструкцию, которая принимает привязку к свойству, проверяет свойство с помощью его проверкиатрибуты и каким-то образом предоставляет информацию для проверки в структуру проверки TextBox.

Для дальнейшей разработки объектов данных:

public class Port
{
    public int PortPK { get; set; }

    [StringLengthValidator]
    public string Name { get; set; }

    ...
}

public class Ship
{
    [NotNullValidator]
    public int PortFK { get; set; }

    ...
}

Таким образом, привязка TextBox.Text должна показывать Port.Name без его проверки.Проверка должна быть выполнена на Ship.PortFK, которая покажет, был ли установлен порт для корабля.

- edit 2 -

Форма представляет собой CRUD-форму для редактирования.Данные корабля.Текстовое поле является частью элемента управления селектора, который состоит из этого текстового поля, в котором отображается имя порта.Информация и кнопка, используемая для выбора определенного порта.

Проверка должна указывать, был ли выбран порт для корабля.Для этого на Ship.PortFK используется NotNullValidator, если значение PortFK не установлено, запускается валидатор, и пользователю предлагается выбрать порт.

Таким образом, пользователь может выбрать определенный порт для корабля.после чего TextBox покажет имя порта.Поскольку модель данных определяет, что порт является обязательным для судна, проверка TextBox должна указывать пользователю, был ли выбран порт для судна или нет.

1 Ответ

0 голосов
/ 09 июля 2010

Не могли бы вы использовать MultiBinding?MultiBinding позволяет вам преобразовывать несколько значений в одно значение.

<TextBox.ValidationSource>
  <MultiBinding Converter="{StaticResource multiValueConverter}">
    <Binding Path="Ship.Prop1" />
    <Binding Path="Ship.Prop2" />
  </MultiBinding>
</TextBox.ValidationSource>

Выше два свойства Ship передаются в IMultiValueConverter с именем multiValueConverter (вам необходимо реализовать свой собственный конвертер).*

Ваша реализация IMultiValueConverter должна преобразовать значения этих двух свойств в одно значение, которое может быть использовано любым объектом, к которому вы привязываетесь - насколько мне известно, это невозможно - но это единственное значение может быть объектом [].

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

...