如何检索要在SecondPage中使用的ObserableCollection对象

时间:2017-07-24 03:09:20

标签: c# uwp template10

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

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

MainPageViewModel.cs有一个ObservableCollection ScoreData。

<Type>

然后我使用navigationService将其传递给SecondPage

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);

SecondPageViewModel.cs

    {NavigationService.Navigate(typeof(Views.SecondPage), ScoreData);}

对象与项目有关,我无法弄清楚如何使用SecondPage.xaml文本框中的对象项。 尝试创建一个新的observablecollection来执行此操作会给我上面的错误显示。

   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);
    }

2 个答案:

答案 0 :(得分:0)

以下是一些可以帮助你的代码:

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;
}

这可以简化,您可以编辑以满足您的需求。基本上:此代码接受字符串或字符串集合,如果您知道它将始终是一个集合,您可以简化它。此示例也没有正确实现暂停状态下的恢复,但它可以让您了解如何执行此操作。

希望这有帮助。

答案 1 :(得分:0)

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

            }
        }
        catch (Exception ex) {     
        }