以编程方式丢弃DataForm中的更改

时间:2012-04-04 12:42:35

标签: silverlight silverlight-toolkit dataform

我有一个来自System.Windows.Controls.Data.DataForm.Toolkit的DataForm,我需要以编程方式获得与在此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的Cancel按钮还原了我在DataForm中所做的所有更改,这是一个很棒的想法。 但是如何使用childWindow的其他按钮获得相同的效果,或者只是关闭childWindow?

1 个答案:

答案 0 :(得分:0)

我找了你, 并在这里找到一些有用的东西: 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();
   }
}

希望这有帮助。