1
我正在創建一個簡單的WPF應用程序,需要顯示/編輯數據從SQL服務器使用實體框架模型。我創建了一個小測試窗口,以查看事情是如何工作的,並且我注意到屬性更改了事件,並且數據驗證是自動實現的。 這裏是我的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
我認爲你在數據驗證和ExceptionValidation之間混淆。 DataValidation可以個性化,例如:一個沒有@字符的電子郵件可以引發數據驗證錯誤。對此,您應該使用IDataErrorInfo.but ExceptionValidation是任何數據在保存到數據庫時都會導致異常,例如:int屬性不能有非數字字符,並不會保存到數據庫。 EF處理異常驗證錯誤 – HichemSeeSharp