加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在MVVMCross中将参数从Detail传递给MainViewModel

发布时间:2020-12-15 23:32:38 所属栏目:百科 来源:网络整理
导读:我有两个视图:MainView和DetailView.我有一个要显示的项目列表,当用户选择项目时,我将项目属性传递给DetailViewModel,用户可以更新这些值. 到目前为止一切正常,但我想知道如何将更新的值传递给MainViewModel? MainViewModel.cs public MainViewModel Selec
我有两个视图:MainView和DetailView.我有一个要显示的项目列表,当用户选择项目时,我将项目属性传递给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的解决方案.

MvvmCross Messenger可以在NuGet中找到.

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)
{
    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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读