MVVMCross中消息协议中的保存按钮



我一直在尝试使用mvvmcross中的消息协议将参数从DetailViewModel更新到MainViewModel。如果您想动态更新属性,下面的代码会起作用;然而,我很困惑,因为我有save按钮,它允许用户在返回MainViewModel之前确认他在DetailViewModel中的更改。

我应该如何处理这种情况?有办法处理吗?

MainViewModel

private readonly IMvxMessenger _messenger;
private readonly MvxSubscriptionToken _token;
public MainViewModel(IMvxMessenger messenger) {
    _messenger = messenger;
    _token = messenger.Subscribe<SelectedItemMessage>(OnMessageReceived);;
}
private void OnMessageReceived(SelectedItemMessage obj)
{
    Age = obj.Age;
    Category= obj.Category;
}

DetailViewModel

private readonly IMvxMessenger _messenger;
public DetailViewModel(IMvxMessenger messenger) {
    _messenger = messenger;
}
public void UpdateMethod() {
    var message = new SelectedItemMessage(this, SelectedItem); 
    _messenger.Publish(message, typeof(SelectedItemMessage));
}

SelectedItemMessage

public SelectedItemMessage(object sender, double age, int category) : base(sender)
    {
        Age = age;
        Category = category;
    }
    public double Age { get; set; }
    public int Category{ get; set; }
}

如果您的数据只应在用户执行Save操作时更新,请在用户按下UpdateMethod时调用它。

public void Save() {
    UpdateMethod();
}

您可以使用ACR Mvvm跨用户对话框库来显示确认对话框,并仅在用户确认操作时调用UpdateMethod

var result = await UserDialogs.Instance.ConfirmAsync("Pick a choice", "Pick Title");
if (result)
{
    UpdateMethod();
}

在使用

之前,请确保正确设置库

最新更新