【发布时间】:2019-04-30 10:17:53
【问题描述】:
我需要使用 Prism 将数据从 ViewModel 1 传递到 ViewModel 2。
TodoItem 是我的模型,带有字符串:
public TodoItem _todotItem { get; set; }
private readonly INavigationService _navigationService;
我在构造函数中赋值了:
public MainPageViewModel(INavigationService navigationService, TodoItem todotItem)
{
_navigationService = navigationService;
_todotItem = todotItem;
}
这是我用来导航到下一页的代码(包括参数):
NavigationParameters navParams = new NavigationParameters();
navParams.Add("PassedValue", _todoItem.name);
_navigationService.NavigateAsync("SecondPage", navParams);
当我在 _todoItem.name 上设置断点时,它显示 null。在我单击listview 之前获取数据。我错过了什么?
编辑:
这就是我的导航方式(点击来自listview):
private EventItem _selectedEvent { get; set; }
public EventItem SelectedEvent
{
get { return _selectedEvent; }
set
{
if (_selectedEvent != value)
{
if (Device.RuntimePlatform == Device.iOS)
{
_selectedEvent = null;
}
else
{
_selectedEvent = value;
}
NavigationParameters navParams = new NavigationParameters();
navParams.Add("PassedValue", _todoItem.name);
_navigationService.NavigateAsync("SecondPage", navParams);
}
}
}
我确实使用正确的方法来捕获第二个 ViewModel 上的参数(但是,我在第一个 ViewModel 中得到 null):
public void OnNavigatingTo(INavigationParameters parameters)
{
if (parameters.ContainsKey("PassedValue"))
{
_todo = (string)parameters["PassedValue"];
OnPropertyChanged("Todo");
}
}
我使用HTTPClient 来获取数据。
【问题讨论】:
-
如果您安装了 ReSharper,它会告诉您
_todoItem的命名约定不正确。 -
@samis 你的意思是大写?我改变了它,但仍然为空。
-
您可以改用
var navParams = new NavigationParameters();。 -
@samis 更改后仍然为空:var navParams = new NavigationParameters();
标签: c# xamarin xamarin.forms prism