Я работаю над WPF-приложением, в котором я выполняю проверку с помощью правил IDataErrorInfo и правил проверки. Для отключения кнопки сохранения в то время как все еще есть ошибки данных во время выполнения, я сделал стиль:Может ли стиль отключения кнопки сохранения при выполнении валидации в WPF быть созданным
<!--Disabling the Save-button by style not viewmodel-property-->
<Style x:Key="isEnabled_save_button" TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=tbx_firstname, Path=(Validation.HasError)}" Value="true">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=tbx_lastname, Path=(Validation.HasError)}" Value="true">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=tbx_age, Path=(Validation.HasError)}" Value="true">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
Это прекрасно работает, но это немного сложнее, потому что я должен проверить каждый элемент управления, который должен подтвердить , Так что я попытался написать общий триггер данных:
<!--Disabling the Save-button by style not viewmodel-property-->
<Style x:Key="isEnabled_save_button" TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=(Validation.HasError), RelativeSource={RelativeSource AncestorType=Window}}" Value="True">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
Но это не работает. Как я могу сделать его общим?
Что делать, если проверка не находится в режиме просмотра, а в валидационном классе? –
Затем вы должны ознакомиться с шаблоном проектирования MVVM :) Логика проверки правильности входит в класс модели представления, особенно если вы реализуете интерфейс IDataErrorInfo или INotifyDataErrorInfo. В любом случае нет смысла реализовывать какой-либо из этих интерфейсов. Кроме того, до сих пор нет способа сделать привязку к значению свойства Validation.HasError нескольких разных * элементов * "generic". – mm8
Но в случае, если вы хотите проверить возраст, вы должны использовать класс ValidationRule для проверки того, введен ли пользователь blanck или буквы. Это не поддерживается в viewmodel, где возраст определяется как integer. Вы можете посмотреть мой проект «Validation_IDataErrorInfo2» на странице https://github.com/patrickpirzer/WpfValidation –