【问题标题】:MVVMCROSS Ios Binding ShowViewModelMVVMCROSS Ios 绑定 ShowViewModel
【发布时间】:2014-06-05 08:39:24
【问题描述】:

通过调用 showviewmodel-method 在模型中进行导航后,我遇到了 mvvmcross 中的数据绑定问题。在 android 端它可以工作。

所以问题是,导航本身正在工作,但我没有从模型中获得任何数据。

模型中的导航:

ShowViewModel<TeamEventDetailsViewModel>(new { eventID = item.ID });

包含数据的视图模型:

public class TeamEventDetailsViewModel
        : EventDetailsViewModel
    {
        public TeamEventModel CurrentEvent
        {
            get { return MyCurrentEvent as TeamEventModel; }
            set
            {
                MyCurrentEvent = value; 
                RaisePropertyChanged(() => CurrentEvent);
                TickerModel.Comments = value.Comments;
                RaisePropertyChanged(() => TickerModel);
                LineupModel.Team1Players = value.Team1Players;
                LineupModel.Team2Players = value.Team2Players;
                RaisePropertyChanged(() => LineupModel);
            }
        }

        private EventDetailsLineupViewModel _lineupModel = new EventDetailsLineupViewModel();
        public EventDetailsLineupViewModel LineupModel
        {
            get { return _lineupModel; }
            set { _lineupModel = value; RaisePropertyChanged(() => LineupModel); }
        }

        public TeamEventDetailsViewModel()
        {
          EventToken = MvxMessenger.Subscribe<EventUpdateMessage>(OnEventUpdateMessage);
        }

        private void OnEventUpdateMessage(EventUpdateMessage eventUpdate)
        {
            if (MyCurrentEvent != null && eventUpdate.Event.ID == MyCurrentEvent.ID)
            {
                var updatedEvent = (TeamEventModel)eventUpdate.Event;
                var myEvent = CurrentEvent;
                if(updatedEvent.Score!=null)
                    myEvent.Score = updatedEvent.Score;
                if (updatedEvent.Team1Players != null)
                    myEvent.Team1Players = updatedEvent.Team1Players;
                if (updatedEvent.Team2Players != null)
                    myEvent.Team2Players = updatedEvent.Team2Players;

                CurrentEvent = myEvent;
            }
        }

        protected override void Update(EventModel eventdetails)
        {
            CurrentEvent = (TeamEventModel) eventdetails;
        }

        private string _teststring = "success";

        public string Teststring
        {
            get { return _teststring; }
            set
            {
                _teststring = value;
                RaisePropertyChanged(()=>_teststring);
            }
        }
    }

正如您在底部看到的,我实现了一个测试字符串来证明功能。

在视图中绑定:

public class TeamEventDetailsView : MvxViewController
    {

        public UILabel TestLabel = new UILabel();

        public TeamEventDetailsViewModel TeamEventDetailsViewModel
        {
            get { return (TeamEventDetailsViewModel)base.ViewModel; }
            set { base.ViewModel = value; }
        }

        public override void ViewDidLoad()
        {
            View.AddSubview(TestLabel);


            this.CreateBinding(TestLabel).To<TeamEventDetailsViewModel>(vm => vm.Teststring).Apply();

            TestLabel.BackgroundColor = UIColor.Orange;

        }        

        public override void ViewDidLayoutSubviews()
        {
            base.ViewDidLayoutSubviews();
            TestLabel.Frame=new RectangleF(0,20,View.Frame.Width,80);
        }
    }

所以我再说一遍,导航本身可以工作,但模型中的数据不会显示在视图上。

如果我在视图中手动创建 ViewModel,那么绑定也可以工作,但在我的情况下,我不能这样做,因为数据是根据从调用导航过程的 ViewModel 生成的数据来提取的。

手动视图模型:

TeamEventDetailsViewModel = new TeamEventDetailsViewModel();
TeamEventDetailsViewModel.Init(9816);

据我所知,我所做的与 Stuard 在他的教程中所做的完全一样:

https://www.youtube.com/watch?v=cbdPDZmuHk8

有人对我有什么建议吗? 谢谢。

【问题讨论】:

  • 调试跟踪中有什么奇怪的地方吗?
  • 我一直在试图找出在 Android/WinRT 中加载一段时间后立即在哪里充气,我想你的问题可能已经回答了。谢谢!

标签: ios xamarin mvvmcross


【解决方案1】:

MvvmCross 会在 base.ViewDidLoad() 中创建 ViewModel - 如果您将该调用添加到您的 ViewDidLoad 覆盖,那么一切都应该正常

【讨论】:

  • 谢谢斯图尔特,你是 mvvmcross 的王者。:-)
  • 这是在不使用 showviewmodel-navigation 时出现运行时异常的原因吗?通常我删除 base.viewdidload() 因为它会创建一个异常。这两个问题有关系吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多