LamaCoder
LamaCoder

Reputation: 223

Setting frames datacontext

My WPF window should be able to load in different controls in same spot on the window; which should be frames to fulfill that task.

Hence i'm trying to make a frame load different pages by editing a databound string containing the Frames source. And I have managed to do that, however at the moment I have no idea how to share the frames data to the windows viewmodel hosting the frame.


I'm using MVVM and I thougth that if I could also databind a "viewmodel" to the frames datacontext, I could then both choose which page to load and which datacontext the page should use, all from the host window, therefore having access to it.

Below is my 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>

However, if I now assign the pages datacontext through this binding, instead of in the code behind, nothing gets loaded. Now I basically end up with a blank frame.

Why?

Upvotes: 1

Views: 1821

Answers (1)

Yuval Itzchakov
Yuval Itzchakov

Reputation: 149528

You can use Window.Resources to bind to your DataContext, then Bind to the FrameURI (You'll need to fix the appropriate namespace instead of my custom 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>

You can find a very basic tutorial here

Upvotes: 0

Related Questions