1

Entity Framework Model を使用して SQL サーバーからデータを表示/編集する必要がある単純な WPF アプリケーションを作成しています。小さなテスト ウィンドウを作成して動作を確認したところ、プロパティ変更イベントとデータ検証が自動的に実装されていることに気付きました。ここに私のxamlがあります:

<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 インターフェイスを実装していますか?

4

1 に答える 1

3

はい、INotifyPropertyChangedすでに実装されていIDataErrorInfoますが、自分で実装する必要があります。
あなたのエンティティは、それが最終的に実装EntityObjectする自己継承元を継承しますStructuralObjectINotifyPropertyChanged

于 2012-07-01T18:28:40.933 に答える