设置帧数据上下文

本文关键字:上下文 数据 设置 | 更新日期: 2023-09-27 18:03:00

我的WPF窗口应该能够在窗口的同一点加载不同的控件;这些帧应该是用来完成任务的。

因此,我试图通过编辑包含框架源的绑定字符串来使框架加载不同的页面。我已经设法做到了这一点,但是目前我不知道如何将框架数据共享到托管框架的windows视图模型。


我正在使用MVVM,我想如果我也可以绑定一个"viewmodel"到框架的数据上下文,然后我可以选择加载哪个页面和页面应该使用哪个数据上下文,所有这些都来自主机窗口,因此可以访问它。

下面是我的xaml。

<Window x:Class="View.Window"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window" Height="300" Width="300">
<Grid>
    <Frame NavigationUIVisibility="Hidden" DataContext="{Binding WindowClass.DataContext}" Source="{Binding WindowClass.FrameURI}"/>
</Grid>
但是,如果我现在通过这个绑定而不是在后面的代码中分配页面数据上下文,则不会加载任何内容。现在我基本上得到了一个空白帧。

为什么?

设置帧数据上下文

您可以使用Window.Resources绑定到您的DataContext,然后绑定到FrameURI(您需要修复适当的namespace而不是我的自定义xmlns:WindowClass):

<Window x:Class="View.Window"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:WindowClass="clr-namespace:WindowClass"
    Title="Window" Height="300" Width="300">
<Window.Resources>
    <WindowClass:MyViewModelName/>
</Window.Resources>
<Grid>
    <Frame NavigationUIVisibility="Hidden" DataContext={Binding} Source="{Binding FrameURI}"/>
</Grid>

你可以在这里找到一个非常基本的教程