ОК, работая над WPF (используя MVVM) и столкнувшись с вопросом, вы хотите получить какой-либо ввод. У меня есть простой классУведомление об ошибке привязки привязки WPF
, как показано ниже (предположим, что я IDataErrorInfo реализован):
public class SimpleClassViewModel
{
DataModel Model {get;set;}
public int Fee {get { return Model.Fee;} set { Model.Fee = value;}}
}
Я затем попытаться привязать к нему в XAML:
<TextBox Text={Binding Fee, ValidatesOnDataErrors=true}/>
когда пользователь затем очищает текст, возникает ошибка привязки данных, поскольку она не может преобразовать string.empty в int. Ну, плата является обязательным полем, но поскольку привязка данных не будет конвертировать назад, я не могу предоставить информацию об ошибке, потому что мой класс не обновляется. Итак, я должен сделать следующее?
public class SimpleClassViewModel
{
DataModel Model {get;set;}
int? _Fee;
public int? Fee
{
get { return _Fee;}
set { _Fee = value;if (value.HasValue) { Model.Fee = value;}
}
}
Я не уверен, согласен ли я с вами. Плата, похоже, является собственностью, с которой вы будете делать расчеты, поэтому она должна быть числовой. Все числовые поля будут вводиться через текстовые поля, принимающие строки. То, как вы это предлагаете, должно было бы реализовать все свойства, которые представляют числа как с строкой, так и с числовым вариантом. Используя конвертер, вы должны написать код преобразования только один раз. – Dabblernl
Нет причин, по которым вам приходится писать код конверсии более одного раза - просто используйте его при необходимости. Обычно, однако, это просто вызов метода TryParse, поэтому там нет боли. Кроме того, размещение кода в виртуальной машине означает, что в представлении, где будут представлены дизайнеры, вы можете ошибиться. –