0

DataForms は、ユーザーがタブでフィールドから出るとすぐに CurrentItem を更新するように見えます。これは、AutoCommit = false の場合でも発生します。この動作の副作用は、データにバインドされている他のコントロールが、ユーザーが [OK] をクリックして DataForm の変更を受け入れるときではなく、ユーザーがデータを編集しているときに更新されることです。その動作を変更して、ユーザーが変更を受け入れたときに CurrentItem へのデータの書き込みを延期する方法はありますか?

編集:私が使用している DataForm の Xaml のほとんどは次のとおりです。

xmlns:DataFormControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm.Toolkit"

<DataFormControls:DataForm x:Name="dataForm" AutoCommit="False" AutoEdit="False">           
            <DataFormControls:DataForm.EditTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Vertical">

                        <DataFormControls:DataField Label="Title">
                            <TextBox Text="{Binding Title, Mode=TwoWay}" Style="{StaticResource TextBoxStyle}"/>
                        </DataFormControls:DataField>

                        <DataFormControls:DataField Label="First Name">
                            <TextBox Text="{Binding FirstName, Mode=TwoWay}"/>
                        </DataFormControls:DataField>

                        <DataFormControls:DataField Label="Middle Name">
                            <TextBox Text="{Binding MiddleName, Mode=TwoWay}"/>
                        </DataFormControls:DataField>

                        <DataFormControls:DataField Label="Last Name">
                            <TextBox Text="{Binding LastName, Mode=TwoWay}"/>
                        </DataFormControls:DataField>
                    </StackPanel>
                </DataTemplate>
            </DataFormControls:DataForm.EditTemplate>
        </DataFormControls:DataForm>

編集 2: この動作を回避するために私が使用している回避策は、編集するオブジェクトのコピーを作成し、それを DataForm.CurrentItem プロパティに設定することです。ユーザーが編集を受け入れると、データは元のオブジェクトにコピーされます。 . そこにもっと良い解決策があることを願っています。

4

1 に答える 1

1

すべてがエンティティの同じインスタンスにバインドされます。DataForm フィールドはエンティティのプロパティにバインドされているため、フィールドを離れるとプロパティ セッターが呼び出され、値が変更されて INotifyPropertyChanged.PropertyChanged イベントが発生します。これにより、値が変更され、それらのバインディングが更新されたことが、バインドされた他のコントロールに通知されます。

本当にこれを防ぎたい場合は、DataForm がバインドされているエンティティのクローンを作成するために多大な作業を行う必要があります。その後、アイテムがコミットされたときに、オリジナルをクローンの値で更新します。これはお勧めできません。

または、DomainContext の複数のインスタンスを作成し、エンティティを 2 回 (DataForm 用に 1 回、他のディスプレイ用に 1 回) ロードすることもできます。一方の変更を送信した後、他方のエンティティを再ロードできます。ただし、これはアプリケーションで他の問題を引き起こす可能性が高いため、お勧めしません。

ライブバインディングが問題を引き起こしている理由に興味があります。

于 2010-03-11T09:31:55.553 に答える