如何检索传递的 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) {
}
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) {
}