【发布时间】: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 中加载一段时间后立即在哪里充气,我想你的问题可能已经回答了。谢谢!