C# 是否可以访问框架当前页面的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:

在wpf中,是否可以访问框架当前页面的DataContext?如果是,如何进行

如果否,我应该使用什么来替换框架,以便访问其DataContext

如果有什么不清楚的,请告诉我

更新:澄清

我在
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里了,对吗?因为你的样品,我已经弄明白了。谢谢