Програмно отхвърляне на промените в 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
Можете ли да покажете как и кога извиквате своя код за запазване - вероятно е готово, преди да стигнете до onclosing   -  person BugFinder    schedule 04.04.2012
comment
Мисъл #2 Имате ли автоматичен ангажимент, зададен на true?   -  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