Я создаю простое приложение WPF, которое должно отображать/редактировать данные с SQL-сервера с использованием модели Entity Framework. Я создал небольшое тестовое окно, чтобы увидеть, как все работает, и я заметил, что свойство измененных событий и проверка данных как бы автоматически реализованы. вот моя XAML:с использованием модели EntityFramework как datacontext в wpf
<Style TargetType="{x:Type Button}">
<Setter Property="IsEnabled" Value="False"/>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ElementName=txtRibbonCoreSize,Path=(Validation.HasError)}" Value="False"/>
</MultiDataTrigger.Conditions>
<Setter Property="IsEnabled" Value="True"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
<StackPanel>
<ac:AutoCompleteBox x:Name="txtPrn1" Width="250" HorizontalAlignment="Left"
ValueMemberBinding="{Binding Converter={StaticResource prnC}}"
FilterMode="Contains"
ItemsSource="{Binding PrinterParams}">
<ac:AutoCompleteBox.TextBoxStyle>
<Style TargetType="TextBox">
<Setter Property="FocusManager.FocusedElement"
Value="{Binding RelativeSource={RelativeSource Self}}" />
</Style>
</ac:AutoCompleteBox.TextBoxStyle>
<ac:AutoCompleteBox.ItemTemplate>
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} - {1}">
<Binding Path="Manufacturer"/>
<Binding Path="Model"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ac:AutoCompleteBox.ItemTemplate>
</ac:AutoCompleteBox>
<TextBox Text="{Binding ElementName=txtPrn1,Path=SelectedItem.MHeight,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<Button x:Name="btn1" Content="Accept" Click="btn1_Click"/>
</StackPanel>
и вот мой код:
//instance of EF datamodel object
DbEntities db = new DbEntities();
private void Window_Loaded(object sender, RoutedEventArgs e)
{
DataContext = db;
}
private void btn1_Click(object sender, RoutedEventArgs e)
{
db.SaveChanges();
}
MHeight является целым числом, и если я положить нон целое значение в текстовом поле это границы становится красным и кнопка становится недоступной (по к стилю проверки выше). если я нажму на кнопку, новые данные будут сохранены правильно.
ли модель EF реализует интерфейсы INotifyPropertyChanged и IDataErrorInfo?
хорошо я предполагаю, что есть какой-то механизм проверки ошибок, так как при нажатии на кнопку 'db.SaveChanges()' команда пропускается, если есть ошибки в редактируемых данных. не исключение, просто этого не происходит. – Yoav
Я думаю, вы вводите в заблуждение между Data Validation и ExceptionValidation. DataValidation может быть персонализировано ex: электронное письмо без символа @ может вызвать ошибку проверки данных. Для этого вы должны использовать IDataErrorInfo.but ExceptionValidation - это любые данные, которые могут вызвать исключение при сохранении в базе данных, например: свойство int не могло иметь числовых символов и не будет сохраняться в базе данных. EF обрабатывает ошибки проверки исключений – HichemSeeSharp