Программно отменить изменения в 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 имеет отредактированный объект как DataContext

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

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

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();
   }
}

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

Другие вопросы по тегам