我有一个由MainPage,Menu2和Menu3组成的三页项目。 MainPage是主要的,但所有三个页面应该相互协调。
可以在每个之间完成导航和元素传递: MainPage传递给Menu2 Menu2传递给Menu3 Menu3传递给MainPage 以及所有其他可能性。
我设法将元素从MainPage传递给Menu2。返回元素非常有效。 然后我还设法将元素从Menu2传递到Menu3。返回该元素也有效。
在这种情况下,传递不起作用:
我将元素从MainPage传递给Menu2。然后我将元素从Menu2传递到Menu3。我没有将元素从Menu3返回到Menu2,而是尝试将其传递给MainPage。它不起作用。
这个逻辑有解决方案吗?
如果需要,我可以提供代码。
基本上问题是,从Menu2分配后,我无法将元素从Menu3传递到MainPage。 因此,我在Menu2中设置元素,导航到Menu3(传递元素),然后在Menu3中更改值并尝试将其传递给MainPage(此处元素丢失)。
更新
我没有意识到,但我实际上是通过在Xaml中通过绑定在View和View Model之间建立所有连接来使用MVVM。
我包含了一些代码逻辑:
我在每个页面中都有ListBox,顶部的按钮'内容设置为最后一个列表框选择:
firstElement.Content
是MainPage按钮的内容。它被分配了用户选择的列表框位置的值。
我将此信息传递给Menu2,如下所示:
private void Button2Click(object sender, RoutedEventArgs args)
{
// Create PassData object
PassData passData = new PassData();
// Set the InitializeData property from the ListBox
passData.Data = firstElement.Content;
passData.Data2 = secondElement.Content;
passData.Data3 = thirdElement.Content;
// Pass that object to Navigate
this.Frame.Navigate(typeof(Menu2), passData);
}
在:
secondElement
和
thirdElement
分别响应Menu2和Menu3页面的按钮。
这是我在Menu2中检索MainPage选择内容的方法:
// pulling data from first page selection
protected override void OnNavigatedTo(NavigationEventArgs args)
{
// Get the object passed as the second argument to Navigate
PassData passData = args.Parameter as PassData;
// Use that to initilize the button
firstElement.Content = passData.Data;
secondElement.Content = passData.Data2;
thirdElement.Content = passData.Data3;
base.OnNavigatedTo(args);
}
在Button2Click
之后,将Menu2带到视图中。它的button1包含从MainPage中提取的数据。它还包含带有新数据的新列表框。在列表框中选择项目会影响Menu2的button2的内容。
然后我像这样导航到Menu3:
private void Button3Click(object sender, RoutedEventArgs args)
{
// Create PassData object
PassData passData = new PassData();
// Set the InitializeCPU property from the ListBox
passData.Data = firstElement.Content;
passData.Data2 = secondElement.Content;
passData.Data3 = thirdElement.Content;
// Pass that object to Navigate
this.Frame.Navigate(typeof(Menu3), passData);
}
firstElement.Content
和secondElement.Content
都会毫无问题地传递给Menu3。
麻烦来了。如果我从Menu3导航到Menu2,则会保留所有三个按钮的数据并正确返回。
我需要从Menu3导航到MainPage并保留数据,而不是这样做。如果是secondElement.Content它可以工作,但是thirdElement.Content在某处丢失。
如果我把它放在MainPage中(例如在Menu2中,例如检索数据):
PassData passData = args.Parameter as PassData;
// Use that to initilize the button
firstElement.Content = passData.Data;
secondElement.Content = passData.Data2;
thirdElement.Content = passData.Data3;
base.OnNavigatedTo(args);
我在发布时遇到错误:{"Object reference not set to an instance of an object."}