在屏幕之间传递列表。 Windows Phone 8.1 C#
Pass a list between screens. Windows Phone 8.1 C#
我正在使用 Visual Studio 15 并开始为 windows phone 8.1 创建应用
所以此时我需要检查所有选中的复选框并选择他的文本并将选中的值添加到列表中(这已经做了)现在,我需要在页面之间传递这个列表,我被卡住了,我只知道 winforms 方式,并且没用
这是第 1 页的代码
CheckBox[] checkboxes = new CheckBox[] { checkBox, checkBox1,checkBox2,checkBox3,checkBox4,checkBox5,checkBox6,checkBox7,checkBox8,checkBox9, checkbox10, checkbox11, checkbox12, checkbox13};
List<ClassDados> lista = new List<ClassDados>();
ClassDados cDados = new ClassDados();
foreach (CheckBox c in checkboxes)
{
if (c.IsChecked == true)
{
cDados.Pedido = c.Content.ToString();
lista.Add(cDados);
}
}
Frame.Navigate(typeof(Carrinho), (cDados));
现在是第二页的代码
public sealed partial class Carrinho : Page
{
List<ClassDados> lista = new List<ClassDados>();
public <here>Carrinho</here>(List<ClassDados> cDados)
{
this.InitializeComponent();
lista = cDados;
}...
我的Class
class ClassDados
{
public string Pedido { get; set; }
public int Valor { get; set; }
"Here" 在第二页我收到错误:错误 CS0051 可访问性不一致:参数类型 'List' 比方法 'Carrinho.Carrinho(List)'
更难访问
在 windows 形式的 C# 上,我经常使用这种方式,但在 WP 上它不起作用,所以谁能告诉我正确的方法吗?谢谢。
- 我想你想要
foreach(复选框中的CheckBox c)
{
ClassDados cDados = new ClassDados();
如果(c.IsChecked == 真)
{<br>
cDados.Pedido = c.Content.ToString();
lista.Add(cDados);
}
}
否则你只会改变同一个Dados的值
您需要在第二页制作列表public:
public List<ClassDados> lista = new List<ClassDados>();
Frame.Navigate(typeof(dest_page), parameter);
只需序列化 parameter
并将其传递给您的 dest_page,它不会像您假设的那样调用构造函数。
要获得 parameter
,您需要像这样覆盖第二页的 OnNavigatedTo(NavigationEventArgs e)
:
public sealed partial class Carrinho : Page
{
protected override void OnNavigatedTo(NavigationEventArgs e)
{
YOUR_CLASS c = e.Parameter as YOUR_CLASS;
}
}
确保您传递的对象是可序列化的(只要保持简单,就可以了)。
另一种方法是使用全局资源定位器。您可以在 SO 中搜索如何执行此操作。所以基本上,它只是一个资源,您可以在任何您喜欢的页面上引用它。
我正在使用 Visual Studio 15 并开始为 windows phone 8.1 创建应用 所以此时我需要检查所有选中的复选框并选择他的文本并将选中的值添加到列表中(这已经做了)现在,我需要在页面之间传递这个列表,我被卡住了,我只知道 winforms 方式,并且没用
这是第 1 页的代码
CheckBox[] checkboxes = new CheckBox[] { checkBox, checkBox1,checkBox2,checkBox3,checkBox4,checkBox5,checkBox6,checkBox7,checkBox8,checkBox9, checkbox10, checkbox11, checkbox12, checkbox13};
List<ClassDados> lista = new List<ClassDados>();
ClassDados cDados = new ClassDados();
foreach (CheckBox c in checkboxes)
{
if (c.IsChecked == true)
{
cDados.Pedido = c.Content.ToString();
lista.Add(cDados);
}
}
Frame.Navigate(typeof(Carrinho), (cDados));
现在是第二页的代码
public sealed partial class Carrinho : Page
{
List<ClassDados> lista = new List<ClassDados>();
public <here>Carrinho</here>(List<ClassDados> cDados)
{
this.InitializeComponent();
lista = cDados;
}...
我的Class
class ClassDados
{
public string Pedido { get; set; }
public int Valor { get; set; }
"Here" 在第二页我收到错误:错误 CS0051 可访问性不一致:参数类型 'List' 比方法 'Carrinho.Carrinho(List)'
更难访问在 windows 形式的 C# 上,我经常使用这种方式,但在 WP 上它不起作用,所以谁能告诉我正确的方法吗?谢谢。
- 我想你想要
foreach(复选框中的CheckBox c)
{
ClassDados cDados = new ClassDados();
如果(c.IsChecked == 真)
{<br>
cDados.Pedido = c.Content.ToString();
lista.Add(cDados);
}
}
否则你只会改变同一个Dados的值
您需要在第二页制作列表public:
public List<ClassDados> lista = new List<ClassDados>();
Frame.Navigate(typeof(dest_page), parameter);
只需序列化 parameter
并将其传递给您的 dest_page,它不会像您假设的那样调用构造函数。
要获得 parameter
,您需要像这样覆盖第二页的 OnNavigatedTo(NavigationEventArgs e)
:
public sealed partial class Carrinho : Page
{
protected override void OnNavigatedTo(NavigationEventArgs e)
{
YOUR_CLASS c = e.Parameter as YOUR_CLASS;
}
}
确保您传递的对象是可序列化的(只要保持简单,就可以了)。
另一种方法是使用全局资源定位器。您可以在 SO 中搜索如何执行此操作。所以基本上,它只是一个资源,您可以在任何您喜欢的页面上引用它。