Программно отменить изменения в DataForm

У меня есть DataForm из System.Windows.Controls.Data.DataForm.Toolkit, и мне нужно программно получить тот же результат, что и после нажатия кнопки «Отмена» в этой DataForm.

Мне это нужно, потому что этот DataForm находится в ChildWindow, и если я что-то изменю в DataForm и закрою ChildWindow, то изменения будут зафиксированы. Так работать не должно. Когда я закрываю ChildWindow, я хочу отменить все изменения так же, как после нажатия кнопки «Отмена».

я пробовал

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
    dfColumnInfo.CancelEdit();

    base.OnClosing(e);
}

но это не работает.

Заранее спасибо.

bugfinder предложил добавить код, сохраняющий изменения. Этого нет, потому что childWindow имеет editedObject как DataContext.

childWindow.DataContext = table;
childWindow.MyDataForm.DataContext = table.Items;
childWindow.Show();

Я не знаю как, но кнопка «Отмена» в DataForm отменяет все изменения, которые я сделал в DataForm, и это отличная мысль. Но как получить тот же эффект, используя другую кнопку childWindow или просто закрыв childWindow?


person user278618    schedule 04.04.2012    source источник
comment
Можете ли вы показать, как и когда вы вызываете свой код сохранения - скорее всего, это сделано до того, как вы перейдете к закрытию   -  person BugFinder    schedule 04.04.2012
comment
Мысль №2. Установлено ли у вас значение true для autocommit?   -  person BugFinder    schedule 04.04.2012


Ответы (1)


Я искал вас и нашел здесь кое-что полезное: http://forums.silverlight.net/t/112449.aspx/1

Потом протестировали вот так:

void dform_EditEnded(object sender, DataFormEditEndedEventArgs e)
{
    if (e.EditAction != DataFormEditAction.Commit)
    {
        (dform.CurrentItem as MyEntity).RejectChanges();
        return;
    }
}

Для достижения этой цели MyEntity должен быть общедоступным, как я кодировал его часть ниже. Я делюсь словом с форума silverlightnet «Чтобы иметь возможность вызывать RejectChanges (который является защищенным методом класса System.Windows.Ria.Entity, мы должны сделать его общедоступным»

public partial class MyEntity:Entity
{
   public void RejectChanges()
   {
       if (HasChanges)
           base.RejectChanges();
   }
}

Надеюсь это поможет.

person Davut Gürbüz    schedule 10.04.2012