Числовое текстовое поле с шаблоном MVVM - PullRequest
7 голосов
/ 28 сентября 2011

Я видел числовые реализации TextBox с кодом в WPF. Как мы можем сделать это в MVVM шаблоне?

Ответы [ 5 ]

5 голосов
/ 28 сентября 2011

Если честно - что общего между MVVM и числовым текстовым полем?

, если вам нужно числовое текстовое поле, вы создаете новый TextBox, AttachedProperty или Behavior. Здесь - пример поведения MaskedTextbox, чтобы понять, что я имею в виду.

теперь для вашей части MVVM.я предполагаю, что вы хотите подтвердить свой ввод, чтобы быть просто числовымесли ваша viewmodel имеет свойство типа int, то ваша привязка просто работает, если ваше представление получило входные данные, которые можно преобразовать в int.в противном случае ваша viewmodel никогда не будет проинформирована.теперь есть 2 способа:

во-первых: вы убедитесь, что ваше представление может принимать числовой ввод (с вашим числовым текстовым полем), а свойство viewmodel может иметь значение int.

или второе: ваша viewmodelтип свойства typeof string, и вы используете IDataErrorInfo, чтобы сообщить представлению, когда ввод не является числовым.

4 голосов
/ 28 сентября 2011

В WPF, если вы связываете TextBox со свойством Decimal или Int, он будет принимать только это int или десятичное значение, в противном случае он будет отображать красную рамку, которая не имеет надлежащего значения в привязке. И если вы говорите о числовом текстовом поле обновления, то оно легко доступно с инструментарием WPF через здесь

1 голос
/ 28 сентября 2011

По стандартному определению MVVM вы не хотите, чтобы ViewModel стоял за пользовательским элементом управления. Все, что вам нужно сделать, это расширить элемент управления TextBox и убедиться, что вводится только числовой ввод. Вы также должны добавить DependencyProperty, который возвращает числовой ввод.

ViewModel будет входить, когда этот элемент управления используется в окне или составном элементе управления. Вы бы привязали текстовое или числовое свойство DependencyProperty к общедоступному свойству в вашей модели представления.

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

Если вы действительно хотите сделать это во ViewModel, вам нужно сделать ваше свойство привязанного в виде строки.Убедитесь, что привязка обновляется при каждом нажатии клавиши (с помощью UpdateSourceTrigger).

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

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

С уважением,

Эрик.

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

Хорошо ... если вы хотите получать уведомления в вашей модели представления об изменении свойства text числового текстового поля, просто привязайте его.Если свойство .Text числового текстового поля не является свойством зависимостей, шлепните кодер!

вот это: http://wpftoolkit.codeplex.com/wikipage?title=DecimalUpDown&referringTitle=Home

Я могу порекомендовать, и вы можете связать его с моделью представления через:

<!-- View: -->
<NumericTextBox Text="{Binding MyViewModelTextStringProperty}" />
//ViewModel:
public string MyViewModelTextStringProperty
{
  get/set with NotifyPropertyChanged....
}
...