Программно отменить изменения в 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();
}
}
Надеюсь это поможет.