我需要在Xaml wpf页面中绑定Frame控件上的页面。我的xaml页面:
<Page
x:Class="MyPro.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:MyPro"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:viewmodel="using:MyPro.ViewModel"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:x1="using:System"
mc:Ignorable="d">
<Page.DataContext>
<viewmodel:PagerViewModel x:Name="PagerViewModel"></viewmodel:PagerViewModel>
</Page.DataContext>
<Frame
VerticalContentAlignment="Stretch"
HorizontalContentAlignment="Stretch"
Name="frameMainPage"
DataContext="{Binding Source=Pager.Page, Mode=TwoWay}">
</Frame>
我试过这样做(但我不知道是否正确):
DataContext="{Binding Source=Pager.Page,Mode=TwoWay}”
但不起作用
我的视图模型,我调用Pager来设置新的Page:
class PagerViewModel
{
public PagerViewModel()
{
m_pager = new Pager();
}
public static Pager m_pager;
public Pager Pager
{
get
{
return m_pager;
}
set
{
m_pager = value;
}
}
}
在我的模型中,我这样设置页面模式:
public class Pager : INotifyPropertyChanged
{
private Page m_page;
public Page Page
{
get
{
return m_page;
}
set
{
m_page = value;
OnPropertyChanged("Page");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
我需要从代码中的每个部分更改页面如下所示:
PagerViewModel.m_pager.Page = new MyPage();
如何在通用Windows应用程序UWP上执行此操作?
2条答案
按热度按时间4dbbbstv1#
我是这样解决的:
您必须在UWP上的通用应用程序中使用路径而不是源
ergxz8rk2#
绑定到
Frame
的DataContext
并不做任何事情。DataContext
基本上只是告诉控件它的绑定的相对路径引用了什么,但不会导致任何行为(或者至少这对内置控件是有效的)。在你的例子中,你需要绑定到
Frame
控件的Content
属性:这对我来说确实有效,我已经用你的代码和主页上的一个额外按钮在一个空白解决方案上测试了它:
XAML
代码隐藏
SecondPage
是一个空页面,我将其设置为蓝色背景,以便能够清楚地看到它显示在Frame
中。