Изменение, когда DataForm RIA Services отправляет изменения в объект поддержки - PullRequest
0 голосов
/ 22 сентября 2009

DataForms, кажется, обновляют свой CurrentItem, как только пользователь выходит из поля. Это происходит даже тогда, когда AutoCommit = false. Побочным эффектом такого поведения является то, что другие элементы управления, которые связаны с обновлением данных, в то время как пользователь редактирует данные, а не когда пользователь нажимает кнопку ОК, чтобы принять изменения в DataForm. Есть ли способ изменить это поведение, чтобы отложить запись данных в CurrentItem, когда пользователь принимает изменения?

РЕДАКТИРОВАТЬ: Вот большая часть Xaml для DataForm, которую я использую:

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, а затем, если пользователь примет изменение, данные копируются обратно оригинальный объект. Я надеюсь, что есть лучшее решение.

1 Ответ

1 голос
/ 11 марта 2010

Все связано с одним и тем же экземпляром сущности. Поскольку поля DataForm привязаны к свойствам объекта, при выходе из поля он вызывает установщик свойств, изменяя значение и вызывая события INotifyPropertyChanged.PropertyChanged. Затем он сообщает другим связанным элементам управления, что значение изменилось, и их привязки обновлены.

Если вы действительно хотите предотвратить это, вам потребуется проделать большую работу, чтобы клонировать сущность, с которой связана DataForm, а затем, когда элемент зафиксирован, обновить оригинал значениями клона. Это не рекомендуется.

В качестве альтернативы вы можете иметь несколько экземпляров DomainContext и загружать объекты дважды - один раз для DataForm и один раз для других отображений. После отправки изменений для одного вы можете повторно загрузить объекты для другого. Это, вероятно, приведет к другим проблемам в вашем приложении, поэтому также не рекомендуется.

Мне любопытно, почему живое связывание вызывает проблему.

...