gpt4 book ai didi

c# - 将参数从 Detail 传递到 MVVMCross 中的 MainViewModel

转载 作者:行者123 更新时间:2023-11-30 14:08:07 25 4
gpt4 key购买 nike

我有两个 View :MainViewDetailView。我有一个要显示的项目列表,当用户选择一个项目时,我将项目属性传递给 DetailViewModel 并且用户可以更新这些值。

到目前为止一切正常,但我想知道如何将更新后的值传递回 MainViewModel

MainViewModel.cs

public MainViewModel SelectedItem
{
get { return _selectedItem; }
set
{
_selectedItem = value;
ShowViewModel<DetailViewModel>(
new DetailViewModel.Parameter
{
Date = Date,
Age = _selectedItem.Age,
Category = _selectedItem.Category,
Discount = _selectedItem.Discount,
}
);

RaisePropertyChanged(() => SelectedItem);
}
}

DetailViewModel.cs

public class DetailViewModel: MvxViewModel
{
public double Age { get; set; }
public double Category { get; set; }
public double Discount { get; set; }

public class Parameter
{
public DateTime Date { get; set; }
public double Age { get; set; }
public int Category{ get; set; }
public double Discount { get; set; }
}

public void Init(Parameter param)
{
Age = param.Age;
Category = param.Category;
Discount = param.Discount ;
}
}

最佳答案

ViewModels 之间传递变量的一种方法是基于 Messenger 的解决方案。

可以在 NuGet 中找到 MvvmCross Messenger。

主视图模型

private readonly IMvxMessenger _messenger;
private readonly MvxSubscriptionToken _token;

public MainViewModel(IMvxMessenger messenger) {

_messenger = messenger;
_token = messenger.Subscribe<SelectedItemMessage>(OnMessageReceived);;
}

private void OnMessageReceived(SelectedItemMessage obj)
{
SelectedItem = obj.SelectedItem;
}

DetailViewModel

private readonly IMvxMessenger _messenger;

public DetailViewModel(IMvxMessenger messenger) {
_messenger = messenger;
}

public void YourUpdateMethod() {
var message = new SelectedItemMessage(this, SelectedItem); //SelectedItem assumed it is a ViewModel property.
_messenger.Publish(message, typeof(SelectedItemMessage));
}

SelectedItemMessage

public class SelectedItemMessage : MvxMessage
{
public SelectedItemMessage(object sender, SelectedItem selectedItem) : base(sender)
{
SelectedItem = selectedItem;
}

public SelectedItem SelectedItem { get; set; }
}

看看http://slodge.blogspot.nl/2013/05/n9-getting-message-n1-days-of-mvvmcross.html MvvmCross Messenges 的完整指南。

在消息中使用年龄和类别进行编辑

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

public double Age { get; set; }
public int Category{ get; set; }
}

更改 MainViewModel OnMessageReceived 方法

private void OnMessageReceived(SelectedItemMessage obj)
{
Age = obj.Age;
Category= obj.Category;
}

关于c# - 将参数从 Detail 传递到 MVVMCross 中的 MainViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36731516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com