Проверка пользовательского ввода WPF с использованием MVVM и Entity Framework 4.0 - PullRequest
2 голосов
/ 15 мая 2010

Я создаю приложение WPF 4.0 с использованием MVVM. Модель генерируется с использованием Entity Framework 4.0. Я использую привязку данных в WPF для привязки пользовательского ввода к свойствам модели.

Какой самый простой способ проверки ввода пользователя? Я предпочитаю подход, при котором я могу устанавливать правила проверки для Модели, а не для самого WPF. Как это может быть сделано? Любые образцы приветствуются.

Ответы [ 2 ]

0 голосов
/ 11 апреля 2013

Самый простой способ, который я нашел, взят из этой книги , страницы 624-625.

Модель представления должна реализовывать IDataErrorInfo

private string _newItem;

public string NewItem
        {
            get { return _newItem; }
            set
            {
                if (Equals(_newItem, value)) return;
                _newItem = value;
                SendPropertyChanged("NewItem");
            }
        }

public string this[string propertyName]
        {
            get
            {
                if (propertyName == "NewItem")
                {
                    var valid = NewItem.All(Char.IsLetterOrDigit);
                    if (!valid)
                        return "NewItem can only contain letters and numbers.";
                }
                return null; 
            }
        }

И просмотр длинной версии:

<TextBox>
   <TextBox.Text>
      <Binding UpdateSourceTrigger="PropertyChanged" Path="NewItem">
         <Binding.ValidationRules>
            <DataErrorValidationRule></DataErrorValidationRule>
         </Binding.ValidationRules>
      </Binding>
   </TextBox.Text>
</TextBox>

Или короткая версия:

<TextBox Text="{Binding NewItem,UpdateSourceTrigger=PropertyChanged,ValidatesOnDataErrors=True}"/>

Это должно создать красивую красную рамку вокруг вашего текстового поля, когда правило не выполняется, и вы можете поиграть с сообщением об ошибке так, как вам нужно, например, связать сообщение об ошибке с подсказкой текстового поля ( MSDN ):

<Window.Resources>
        <Style x:Key="TextBoxInError" TargetType="TextBox">
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="true">
                    <Setter Property="ToolTip"
              Value="{Binding RelativeSource={x:Static RelativeSource.Self},
              Path=(Validation.Errors)[0].ErrorContent}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>

А затем просто добавьте это в текстовое поле:

Style="{StaticResource TextBoxInError}"

Ура!

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

Пример приложения BookLibrary проекта WPF Application Framework (WAF) показывает приложение MVVM. Он использует Entity Framework и определяет правила проверки для классов Model (Entity).

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