元素未在Xaml页面之间传递C#

时间:2016-11-18 13:14:48

标签: c# xaml mvvm parameter-passing

我有一个由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.ContentsecondElement.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."}

0 个答案:

没有答案