为了找到我遇到的这个问题的解决方案,我有一个UWP应用程序,我一直在玩,并且大部分已经能够解决问题。
我面临的问题是汉堡菜单,我有一个框架,我加载页面,显示项目的网格视图。单击它然后在该帧中显示另一页。
新页面具有此功能,我可以在页面中显示数据,完全没有问题。
public sealed partial class CreatureDossier : Page
{
private Species Cat;
public CreatureDossier()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Cat = (Species)e.Parameter;
}
}
在本页的XAML中,我正在放置一个UserControl,我想使用现有的数据,这是我在苦苦挣扎的地方。每次我打破用户控件时,它都会将DataContext显示为空(null)。
我试过了
<UIControls:DossierPanel />
真的不明白我需要做些什么才能让这个User Control使用DataContext,我应该指出我在UserControl中有这个,但是如上所述,DataContext为null。
<TextBlock x:Name="CatName" Text="{Binding Cat.name}" />
现在有趣的是,如果我在Usercontrol上使用一个名为Cat的属性,后面有UserControl代码中的普通文本字符串和DependencyProperty,我可以在构造函数中使用this.DataContext = this显示它。
背后的用户控制代码
public sealed partial class DossierPanel : UserControl
{
public Models.Species Cat { get { return this.DataContext as Models.Species; } }
public DossierPanel()
{
this.InitializeComponent();
}
}
CreatureDossier.xaml
<TextBlock x:Name="CreatureName" Text="{x:Bind Cat.name}" />
<UIControls:DossierPanel />
了解我需要做什么的任何帮助都会很棒。
答案 0 :(得分:0)
设置DataContext
的{{1}}:
Page
然后public sealed partial class CreatureDossier : Page
{
private Species Cat;
public CreatureDossier()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Cat = (Species)e.Parameter;
DataContext = Cat;
}
}
将从UserControl
继承DataContext
(假设您没有在其他地方显式设置DataContext属性)并且您应该能够绑定到任何公共Page
类的属性如下:
Species
修改强>
<TextBlock x:Name="CatName" Text="{Binding name}" />
不使用{x:Bind}
作为默认来源:https://docs.microsoft.com/en-us/windows/uwp/xaml-platform/x-bind-markup-extension
但是如果你给DataContext
UserControl
:
x:Name
...并在<UIControls:DossierPanel x:Name="uc" />
属性中添加一个setter:
Cat
并设置这个:
public sealed partial class DossierPanel : UserControl
{
public Models.Species Cat { get; set; }
public DossierPanel()
{
this.InitializeComponent();
}
}
public sealed partial class CreatureDossier : Page
{
public CreatureDossier()
{
this.InitializeComponent();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
uc.Cat = (Species)e.Parameter;
}
}