我无法将
ObservableCollection<Video>
从一页传递到另一页。我在整个项目中都使用相同的模式,所以我不确定为什么它在这里失败。我正在使用 MVVM 模式。
这是我的代码:
我声明
ObservableCollection<Video>
并在构造函数中实例化它:
[ObservableProperty]
private ObservableCollection<Video> videoList;
//...
public Constructor()
{
VideoList = new ObservableCollection<Video>();
}
设置通行证的方法:
[RelayCommand]
private async Task CreateCase()
{
if (0 == VideoList.Count)
{
await App.Current.MainPage.DisplayAlert("No video(s) selected", "You must have at least one video selected to add to your new Case.", "", "OK");
return;
}
Dictionary<string, object> param = new Dictionary<string, object>
{
{ "VideoList", VideoList }
};
await Shell.Current.GoToAsync($"//{nameof(CreateCasePage)}", param);
}
ObservableCollection<Video>
将其放入此方法并放入字典中。这是一个屏幕截图,仅供确认。在代码中,我选择了三个对象,你瞧,它们在列表中:声明
ObservableCollection<Video>
,并使用 QueryProperty
。 “投掷”页面和“捕捉”页面使用相同的名称:
[QueryProperty("VideoList", "VideoList")]
public partial class CreateCasePageViewModel : ObservableObject
{
#region Properties
[ObservableProperty]
private ObservableCollection<Video> videoList;
//...
public Constructor()
{
VideoList = new ObservableCollection<Video>();
}
}
我不确定我是否应该在“catch”一侧“新”
ObservableCollection<Video>
,但我已经尝试过新和不新它并得到相同的结果。
无论我尝试什么,
ObservableCollection<Video>
在“catch”一侧始终为空。问题是,我在项目的其他地方使用了相同的代码并且它有效。
我不知道还要看什么来调试。
您在此处混合了基于字符串的查询参数和基于对象的导航数据方法。检查文档以获取更多信息。
您的接收 ViewModel 应实现 IQueryAttributable 接口,而不是使用 QueryProperty:
public partial class CreateCasePageViewModel : ObservableObject, IQueryAttributable
{
[ObservableProperty]
private ObservableCollection<Video> videoList;
public void ApplyQueryAttributes(IDictionary<string, object> query)
{
VideoList = query["VideoList"] as ObservableCollection<Video>;
}
}
这是必要的,因为只有简单类型和字符串可以作为基于字符串的查询参数传递。