Xaml &引用;撤销;未单击“保存”按钮时数据绑定更改

Xaml &引用;撤销;未单击“保存”按钮时数据绑定更改,xaml,data-binding,xamarin.forms,Xaml,Data Binding,Xamarin.forms,可能吗 我只有一个列表和编辑页面 包含项目列表的页面 编辑页面,编辑第一页中的项目 其中编辑页面有一个取消和保存按钮 当我按下保存按钮时,我保存项目并导航到项目更新的上一页。因此,页面之间的数据绑定工作正常 如果单击“取消”或导航回,我需要“撤消”所做的数据绑定更改。 我所做的工作但我觉得可能不是要走的路,是一个“oldObject”和一个“didClickSaveButton”属性,当我返回第一页时(在出现时)我会检查它,如果没有单击save按钮,则恢复到旧值 难道没有更好的办法吗?可能内

可能吗

我只有一个列表编辑页面

  • 包含项目列表的页面
  • 编辑页面,编辑第一页中的项目
  • 其中编辑页面有一个取消和保存按钮
当我按下保存按钮时,我保存项目并导航到项目更新的上一页。因此,页面之间的数据绑定工作正常

如果单击“取消”或导航回,我需要“撤消”所做的数据绑定更改。

我所做的工作但我觉得可能不是要走的路,是一个“oldObject”和一个“didClickSaveButton”属性,当我返回第一页时(在出现时)我会检查它,如果没有单击save按钮,则恢复到旧值


难道没有更好的办法吗?可能内置了什么?

为编辑页面创建一个视图模型。加载页面时,使用所选域对象创建VM。如果用户选择保存,则将更改从VM保留回域对象。如果用户取消,则什么也不做。

只需克隆域对象并将其传递给viewmodel进行数据绑定。我走了一条又快又脏的路

public static T Clone<T>(T source)
        {
            var serialized = JsonConvert.SerializeObject(source);
            return JsonConvert.DeserializeObject<T>(serialized);
        }
公共静态T克隆(T源)
{
var serialized=JsonConvert.serialized对象(源);
返回JsonConvert.DeserializeObject(序列化);
}

是的,为每个页面创建一个新的视图模型

是的,我想这可能是我的问题。您是否建议始终为我创建的每个xaml页面创建一个新的ViewModel?我在任何地方都找不到这方面的指导方针……我认为在MVVM中,这是理想的方法