C# 是否可以访问框架当前页面的DataContext?怎么用?
在wpf中,是否可以访问框架当前页面的DataContext?如果是,如何进行 如果否,我应该使用什么来替换框架,以便访问其DataContext 如果有什么不清楚的,请告诉我 更新:澄清 我在C# 是否可以访问框架当前页面的DataContext?怎么用?,c#,wpf,frame,datacontext,C#,Wpf,Frame,Datacontext,在wpf中,是否可以访问框架当前页面的DataContext?如果是,如何进行 如果否,我应该使用什么来替换框架,以便访问其DataContext 如果有什么不清楚的,请告诉我 更新:澄清 我在main window.xaml中有一个框架。我想访问显示在框架中的当前页面的DataContext。假设我想显示当前页面的ViewModel的名为title的string属性。(假设每个页面“ViewModel都有title属性) 更新:这是我的MainWindow.xaml <Window x:
main window.xaml
中有一个框架。我想访问显示在框架中的当前页面的DataContext
。假设我想显示当前页面的ViewModel
的名为title的string
属性。(假设每个页面“ViewModel
都有title属性)
更新:这是我的MainWindow.xaml
<Window x:Class="Libertalia.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:materialDesign="http://materialdesigninxaml.net/winfx/xaml/themes"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
.
.
.
DataContext="{Binding Main, Source={StaticResource Locator}}"
>
<ScrollViewer VerticalScrollBarVisibility="Auto">
<Grid>
<Frame Panel.ZIndex="1" x:Name="MainFrame" JournalOwnership="OwnsJournal" NavigationUIVisibility="Hidden" Source="View/BlankPage.xaml" />
</Grid>
</ScrollViewer>
</Window>
页面代码(仅其中一个,仅示例):
我不确定它是否适用于您,因为我仍然不理解视图模型和您的架构中的模型之间的关系,但请尝试使用以下想法:
1) 。My Window1的xaml包含以下内容:
<Grid>
<Frame Panel.ZIndex="1"
x:Name="MainFrame"
JournalOwnership="OwnsJournal"
NavigationUIVisibility="Hidden"
Source="UserControl1.xaml" />
</Grid>
3) 。提取和修改框架内容的DataContext的代码:
Window1 window = new Window1();
//window.Content = uc;
var aa = window.Content as Grid;
foreach (var e in aa.Children)
{
if (e is Frame)
{
Frame f = e as Frame;
f.ContentRendered += F_ContentRendered;
}
}
//only inside of handler of ContentRendered event you can access to the content of your Frame:
private void F_ContentRendered(object sender, EventArgs e)
{
var frame = sender as Frame;
UserControl1 uc1 = frame.Content as UserControl1;
MainViewModel mvm = uc1.DataContext as MainViewModel;
}
它应该会起作用。我不确定它是否会对您起作用,因为我仍然不理解视图模型和您的架构中的模型之间的关系,但请尝试使用以下想法:
1) 。My Window1的xaml包含以下内容:
<Grid>
<Frame Panel.ZIndex="1"
x:Name="MainFrame"
JournalOwnership="OwnsJournal"
NavigationUIVisibility="Hidden"
Source="UserControl1.xaml" />
</Grid>
3) 。提取和修改框架内容的DataContext的代码:
Window1 window = new Window1();
//window.Content = uc;
var aa = window.Content as Grid;
foreach (var e in aa.Children)
{
if (e is Frame)
{
Frame f = e as Frame;
f.ContentRendered += F_ContentRendered;
}
}
//only inside of handler of ContentRendered event you can access to the content of your Frame:
private void F_ContentRendered(object sender, EventArgs e)
{
var frame = sender as Frame;
UserControl1 uc1 = frame.Content as UserControl1;
MainViewModel mvm = uc1.DataContext as MainViewModel;
}
它应该可以工作。你是说从视图的代码中访问视图的DataContext吗?不是,我想从主窗口访问页面的DataContext
(框架的父级)
)。你说的“页面”是什么意思?如果我理解你的想法,是的-一般来说是可能的,但您需要提供视图模型和视图的更多详细信息。添加代码和解释。我解释真正的代码,因为我需要查看视图和视图模型之间的关系。什么是框架?你是指作为窗口内容的视图吗?你是指从视图的代码中访问视图的DataContext吗?不是,我想从MainWindow.xaml
(框架的父级)中访问页面的DataContext
。你所说的“页面”是什么意思?如果我理解你的想法,是的-通常是可能的,但您需要提供视图模型和视图的更多详细信息。添加代码和解释。我解释真正的代码,因为我需要查看视图和视图模型之间的关系。什么是框架?您是指您的窗口内容的视图吗?谢谢您的努力。我为我的问题添加了一些代码,以便您更好地理解我的场景。但正如您所看到的,我在单独的文件中使用了太多的MVVMLight代码,因此很难发布所有代码。因此,在您的示例中,BlankPage.xaml具有要更改的视图模型的目标DataContext。对吧?我尝试了我在解决方案中发布的主要想法,但它仍然有效!我可以访问DataContext并更改其属性。我会稍微改变一下我的帖子。很抱歉,它对我不起作用。你把第三个密码放在哪里了?我已经把它放在MainViewModel里了,对吗?因为你的样品,我已经弄明白了。谢谢,谢谢你的努力。我为我的问题添加了一些代码,以便您更好地理解我的场景。但正如您所看到的,我在单独的文件中使用了太多的MVVMLight代码,因此很难发布所有代码。因此,在您的示例中,BlankPage.xaml具有要更改的视图模型的目标DataContext。对吧?我尝试了我在解决方案中发布的主要想法,但它仍然有效!我可以访问DataContext并更改其属性。我会稍微改变一下我的帖子。很抱歉,它对我不起作用。你把第三个密码放在哪里了?我已经把它放在MainViewModel里了,对吗?因为你的样品,我已经弄明白了。谢谢