无法将 ObservableCollection<Video> 从一个页面传递到另一页面

问题描述 投票:0回答:1

我无法将

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”一侧始终为空。问题是,我在项目的其他地方使用了相同的代码并且它有效。

我不知道还要看什么来调试。

parameters maui observablecollection
1个回答
0
投票

您在此处混合了基于字符串的查询参数基于对象的导航数据方法。检查文档以获取更多信息。

您的接收 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>;
    }
}

这是必要的,因为只有简单类型和字符串可以作为基于字符串的查询参数传递。

© www.soinside.com 2019 - 2024. All rights reserved.