Я уверен, что есть лучший способ (пожалуйста, скажите мне!), Но вот один способ, которым я соединился, который работает.Кажется, что должен быть более легкий путь.Для свойства BaudRate используйте:
public int BaudRate
{
get
{
return m_baudRate;
}
set
{
if (value != m_baudRate)
{
m_baudRate = value;
OnPropertyChanged("BaudRate");//OnPropertyChanged definition left out here, but it's pretty standard
}
}
}
Для XAML у меня нет существенной разметки:
<TextBox Height="23" Margin="137,70,21,0" Name="textBox1" VerticalAlignment="Top" />
Теперь это грязная часть ... Создать класс для проверки:
public class IntRangeRule : ValidationRule
{
// See ValidationRule Class
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
try
{
if (value is int) // replace with your own logic or more robust handling...
{
return new ValidationResult(true, "Fine");
}
else
{
return new ValidationResult(false, "Illegal characters or ");
}
}
catch (Exception e)
{
return new ValidationResult(false, "Illegal characters or " + e.Message);
}
}
}
И затем в конструкторе Window1 (MainWindow) есть:
Binding myBinding = new Binding("BaudRate");
myBinding.NotifyOnValidationError = true;
myBinding.Mode = BindingMode.TwoWay;
ValidationRule rule = new IntRangeRule();
myBinding.ValidationRules.Add(rule);
myBinding.Source = m_data; // where m_data is the member variable of type ConfigurationData
textBox1.SetBinding(TextBox.TextProperty, myBinding);
Все мои попытки сделать все в разметке потерпели неудачу.Лучшие пути?
Дэйв