如何检索传递的 ObserableCollection 对象,以在 SecondPage 中使用

How can I retrieve the ObserableCollection Object Passed, to be used in the SecondPage

Template10 汉堡包。如何检索要在 SecondPage 中使用的对象。 实现这一目标的最佳方法是什么。

我尝试将 Object 转换为新集合,但出现此错误: 无法从 'object' 转换为 'System.Collections.Generic.IEnumerable'

MainPageViewModel.cs 有一个 ObservableCollection ScoreData。

public class MainPageViewModel : ViewModelBase  
   public ObservableCollection<string> ScoreData { get; set; }  

   public MainPageViewModel()
    {List<string> Data = new List<string>();
        Data.Add("10");
        Data.Add("5");
        ScoreData = new ObservableCollection<string>(Data);

然后我使用 navigationService

将其传递给 SecondPage
    {NavigationService.Navigate(typeof(Views.SecondPage), ScoreData);}

SecondPageViewModel.cs

   public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode,
        IDictionary<string, object> suspensionState)
    {
        Value = (suspensionState.ContainsKey(nameof(Value)))
            ? suspensionState[nameof(Value)]?.ToString() : parameter?.ToString();
        await Task.CompletedTask;


        // ERROR
        //cannot convert from 'object' to 'System.Collections.Generic.IEnumerable<string>' 
        ObservableCollection<string> ScoreData1 = new ObservableCollection<string> (parameter);
    }

对象与项目一起存在,我不知道如何使用 SecondPage.xaml 文本框中的对象项目。 尝试创建一个新的 observablecollection 来执行此操作会给我上面显示的错误。

    Text="{x:Bind ViewModel.ScoreData1[0], Mode=OneWay}" />
    Text="{x:Bind ViewModel.ScoreData1[1], Mode=OneWay}" />

这里有一些代码可以让你继续:

public override async Task OnNavigatedToAsync(object parameter, NavigationMode mode, IDictionary<string, object> suspensionState)
{

    if (suspensionState.ContainsKey(nameof(Value)))
    {
        Value = suspensionState[nameof(Value)]?.ToString();
    }
    else if (parameter != null)
    {
        if (parameter is string)
        {
            Value = parameter?.ToString();
        }
        else
        {
            var coll = parameter as IEnumerable<string>;
        }
    }
    await Task.CompletedTask;
}

这可以简化,您可以根据需要进行编辑。基本上:此代码接受字符串或字符串集合,如果您知道它将始终是一个集合,则可以简化它。此示例也没有正确实现从挂起状态恢复,但它可以让您了解如何执行此操作。

希望对您有所帮助。

       try {
            var items=parameter as IEnumerable<Score>;
            foreach(var item in items)
            {
                _score.Add(item);

            }
        }
        catch (Exception ex) {     
        }