C# 如何访问不同页面中的XAML对象

C# 如何访问不同页面中的XAML对象,c#,wpf,xaml,C#,Wpf,Xaml,我有一个Windows 10应用程序,它有一个MainPage.xaml文件。在该文件中,我持有基本菜单(hambuger菜单),并且有一个框架对象,允许我在菜单上的选择更改时加载新页面: 因此,当列表框中的选择发生更改时,有一个非常简单的事件处理程序:MyFrame.Navigate(typeof(WeekPage)) 这行代码使用另一个XAML页面加载帧。现在我的问题是,在WeekPage.xaml.cs中,我可以控制MyFrame对象的导航位置吗 换句话说,我想从另一个XAML文件(Wee

我有一个Windows 10应用程序,它有一个MainPage.xaml文件。在该文件中,我持有基本菜单(hambuger菜单),并且有一个框架对象,允许我在菜单上的选择更改时加载新页面:

因此,当
列表框中的选择发生更改时,有一个非常简单的事件处理程序:
MyFrame.Navigate(typeof(WeekPage))

这行代码使用另一个XAML页面加载
。现在我的问题是,在
WeekPage.xaml.cs
中,我可以控制
MyFrame
对象的导航位置吗

换句话说,我想从另一个XAML文件(
WeekPage.XAML.cs
)的代码后面控制一个XAML文件(
MainPage.XAML
)上的XAML对象及其属性(按钮、文本块、列表框)

我已经尝试了以下方法:
,这似乎没有任何帮助,并且尝试了设置
内部静态NAMESPACE.MainPageMainPage.xaml.cs
上使用
MainPage.trued.MyFrame.Navigate(typeof(StoryPage))
WeekPage.xaml.cs
(我是从中得到这个想法的)但是当我运行程序时,我得到了一个
System.NullReferenceException

另一个缩小我所寻找内容范围的示例 有一个
MainPage.xaml
包含应用程序的基本布局(汉堡包菜单),根据用户在汉堡包菜单的“列表框”中单击的项目,将加载一个新框架,例如:
WeekPage.xaml
WeekPage.xaml
有一个
GridView
,单击该视图时,应将当前帧替换为新帧,并清除
MainPage.xaml中
列表框
上的所有选择。见下面的代码:

private void GridView_ItemClick(object sender, ItemClickEventArgs e)
{
    // Replacing current frame with new frame
    Frame.Navigate(typeof(StoryPage));
    // TODO: I need to clear out any selection in the ListBox item in MainPage.xaml
}

如果您不了解MVVM方法,请阅读更多相关内容。在MVVM方法中,每个视图都将绑定到一个视图模型。Ie视图中的数据将绑定到视图模型属性。 例如:假设您有一个文本框,您将它的text属性绑定到相应视图模型中的string属性

在您的场景中,我们可以有一个由2个子视图组成的主视图

MainWindow.xaml - MainWindowViewModel
SubView1.xaml - SubView1VM
SubView2.xaml - SubView2VM
MainView将由xaml中的2个子视图和主视图模型中的2个子视图模型组成。 您还可以在每个子视图模型中使用与按钮单击或任何此类事件对应的命令

您可以在MainWindowViewModel中处理这些命令。假设在视图2中有一个按钮,可以转换到视图1并更改视图1中的所有文本框值。 在MainWindowViewModel中处理button命令,并在MainVM中更改SubView1VM属性

希望您了解MVVM的概念。使用MVVM很容易实现您的需求。MVVM对编码人员更加友好,有助于将视图数据与模型分离

适用于希望开始使用MVVM的任何人

您为什么要这样做?这只会给想要编辑/查看您的代码的其他人带来更多混乱。您是否遵循MVVM模式?如果是这样,您可以轻松地使用属性、命令、触发器和INotifyPropertyChanged接口来处理此场景。如果您想在xaml.cs中创建控件,那么请尝试创建一个主控件,并将2个UserControls作为子控件放在该控件中。现在有了一个关系,您可以访问父应用程序
Application.Current.MainWindow
。我没有固定的方法来解决这个问题,我正在尝试以最好的方式实现一个解决方案,这就是我发布这个问题的原因。你的建议有点让人困惑,如果你能提供你的方法的更多细节,我将不胜感激。充其量,这个问题太宽泛了。你需要包括一个很好的展示你已经尝试过的东西,并对你遇到的具体问题进行精确的解释。也就是说,正如上面第一条评论所暗示的,你似乎问错了问题。理想情况下,视图(例如页面)甚至不应该访问自己,更不用说其他视图了。视图中的元素应与视图模型相对应;如果您希望一个视图中的输入影响另一个视图中显示的内容,那么在这两个视图之间应该有一个模型,可以对该模型进行一些扩展吗?我的“宽泛”是因为我刚刚遇到了这个问题,和其他任何事情一样,我必须要求学习。例如,我刚刚学会了使用
Frame.Navigate(typeof(StoryPage))
将当前框架替换为另一个页面,但我仍在寻找如何实现这个“模型”,它允许我控制不同页面之间的XAML对象。至于这个问题不够精确,老实说,我看不出它更具体,我的例子就在那里,它讨论了框架。如果您愿意,我可以再添加一个。@PeterDuniho我又添加了一个示例,以帮助您理解我试图通过解释和代码示例来完成的特定任务。我希望这能使讨论变得更加具体。如果您对处理这个问题有任何想法,请让我知道。谢谢您为我提供这个想法。MVVM对我来说是全新的,但我肯定会研究它来解决我的问题。如果出现任何其他查询,我会将其发布在此评论线程中。再一次,谢谢!欢迎正如@Peter Duniho所说,你的问题太广泛,无法回答。无论如何,如果你面临任何问题,请尝试一下,然后回复。无论如何,如果您对答案感到满意,请随时将其标记为答案,以便将来对其他人有所帮助。谢谢您的提示!我添加了一个小的教程视频URL作为参考,任何人都可以找到这个问题,请接受我的更改以标记为响应@昕薇