Я хочу связать вложенное свойство или свойство зависимостей в xaml для ValidationRule в xaml, а затем на основе значения вложенного свойства или свойства зависимостей. Я хочу принять решение суммы в правиле Validation , Я не могу найти решение как передать значение привязки в правило проверки.Attached or dependecy Свойство для ValidationRule WPF
ответ
Я предоставляю вам образец кода, который поможет вам. Я определил ValidationRule для проверки ввода пользователем texbox. Тип проверки выполняется в соответствии с одним параметром enum. Доступный тип проверки: вход пользователя не может быть пустым, пользовательский ввод должен быть числовым, пользовательский ввод должен быть IP-адресом. Второй параметр позволяет отображать конкретное предупреждающее сообщение. Как вы знаете, переменная для целей привязки должна быть DependendyProperty, поэтому здесь вы найдете класс с объявлением paramaters.
public class ValidationParams : DependencyObject
{
// Dependency Properties
public static readonly DependencyProperty MessageProperty = DependencyProperty.Register("Message",
typeof(string),
typeof(ValidationParams),
new FrameworkPropertyMetadata(string.Empty));
public static readonly DependencyProperty ValidationTypeProperty = DependencyProperty.Register("ValidationType",
typeof(FieldValidationRule.EnmValidationType),
typeof(ValidationParams),
new FrameworkPropertyMetadata(FieldValidationRule.EnmValidationType.FieldNotEmpty));
// Properties
[Category("Message")]
public string Message
{
get { return (string)GetValue(MessageProperty); }
set { SetValue(MessageProperty, value); }
}
[Category("ValidationType")]
public FieldValidationRule.EnmValidationType ValidationType
{
get { return (FieldValidationRule.EnmValidationType)GetValue(ValidationTypeProperty); }
set { SetValue(ValidationTypeProperty, value); }
}
Тогда вот класс ValidationRule:
public class FieldValidationRule : ValidationRule
{
public enum EnmValidationType
{
FieldNotEmpty,
FieldNumeric,
FieldIPAddress
}
// Local variables and objects
private ValidationParams mParams = new ValidationParams();
public ValidationParams Params
{
get { return mParams; }
set { mParams = value; }
}
// Override
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
ValidationResult objResult = null;
string sValue = value as string;
objResult = new ValidationResult(true, null);
switch (Params.ValidationType)
{
case EnmValidationType.FieldNotEmpty:
if(string.IsNullOrEmpty(sValue) == true)
objResult = new ValidationResult(false, Params.Message);
break;
case EnmValidationType.FieldNumeric:
int iValue = 0;
if(int.TryParse(sValue, out iValue) == false)
objResult = new ValidationResult(false, Params.Message);
break;
case EnmValidationType.FieldIPAddress:
IPAddress objValue = IPMatrix.CreateHostAddr();
if(IPAddress.TryParse(sValue, out objValue) == false)
objResult = new ValidationResult(false, Params.Message);
break;
}
return objResult;
}
}
И, наконец, вот код XAML:
<TextBox Style="{DynamicResource FieldValue}" Grid.Column="1" IsReadOnly="False">
<TextBox.Text>
<Binding Source="{StaticResource XmlItemChannel}" XPath="@Name" Mode="TwoWay" UpdateSourceTrigger="LostFocus">
<Binding.ValidationRules>
<data:FieldValidationRule>
<data:FieldValidationRule.Params>
<data:ValidationParams Message="{DynamicResource ERR002}" ValidationType="FieldNotEmpty" />
</data:FieldValidationRule.Params>
</data:FieldValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Вы можете видеть, что параметр Сообщения будут переплетены к ресурсу, но вы может также классически связать его.
Хорошая работа, но если вы попытаетесь связать ее, вы получите сообщение об ошибке «Невозможно найти управляющую ошибку FrameworkElement или FrameworkContentElement для целевого элемента». У Томаса Левеска есть ответ на этот вопрос, см. Http://www.thomaslevesque.com/2011/03/21/wpf-how-to-bind-to-data-when-the-datacontext-is-not-inherited/ – 2013-12-19 23:53:19
- 1. WPF, свойство в ValidationRule никогда не установлено
- 2. WPF ValidationRule каплепадение Десятичного
- 3. WPF ValidationRule со свойством
- 4. Parameterize ValidationRule в WPF
- 5. WPF TextBox ValidationRule binding
- 6. Wpf datagrid validationrule для уникального поля
- 7. WPF (.net 3.5) ValidationRule, IDataErrorInfo
- 8. Связывание Attached свойство свойства DataContext
- 9. WPF ValidationRule для StartDate и EndDate
- 10. Validation.GetHasError всегда возвращает истину для WPF ValidationRule
- 11. Связывание с ValidationRule в WPF
- 12. WPF/XAML - ValidationRule в GroupBox?
- 13. ValidationRule vs Behavior in WPF
- 14. WPF ValidationRule Подтвердить, когда элемент управления загружен
- 15. ValidationRule для принудительного использования уникального имени
- 16. Почему мой WPF ValidationRule не выполняется?
- 17. wpf register dependecy другого элемента управления
- 18. WPF ValidationRule: Как узнать, что я проверяю?
- 19. Проверка WPF с использованием ValidationRule класса
- 20. WPF ValidationRule, когда управление IsEnabled = false
- 21. WPF - Почему не ValidationRule a DependencyObject?
- 22. Мой первый C# WPF ValidationRule не стреляет
- 23. Отсутствует dependecy для метода
- 24. WPF TextBox Свойство Наследование
- 25. WPF - Обходное решение для ValidationRule не является DependencyObject
- 26. Состояние передачи WPF ValidationRule для просмотра модели в MVVM
- 27. Используйте свойство Attached, чтобы получить CurrentCell DataGrid после нажатия кнопки
- 28. Attached Property и Binding
- 29. Attached свойства списка типа
- 30. C# WPF Attached Properties - Ошибка: «Свойство не существует в пространстве имен XML»
Можете ли вы предоставить дополнительную информацию о том, что вы конкретно пытаетесь достичь (входные данные, ожидаемый результат и т. Д.)? – Moonshield 2010-11-28 12:35:50