2012-07-01 67 views
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接口?

回答

3

對於INotifyPropertyChanged是的,它已經實施,但IDataErrorInfo你必須實現它你自己。
您的實體從EntityObject它自身從StructuralObject並最終實現INotifyPropertyChanged

+0

嗯,我想有繼承繼承是某種錯誤驗證機制單擊按鈕時'db.SaveChanges()'命令,如果有跳過,因爲編輯數據中的錯誤。沒有例外,它只是不會發生。 – Yoav

+1

我認爲你在數據驗證和ExceptionValidation之間混淆。 DataValidation可以個性化,例如:一個沒有@字符的電子郵件可以引發數據驗證錯誤。對此,您應該使用IDataErrorInfo.but ExceptionValidation是任何數據在保存到數據庫時都會導致異常,例如:int屬性不能有非數字字符,並不會保存到數據庫。 EF處理異常驗證錯誤 – HichemSeeSharp