C# 从框架中页面上的用户控件访问DataContext时出现问题
我一直在努力寻找解决这个问题的方法,我有一个UWP应用程序,我一直在玩弄它,并且大部分时间都能解决问题 我面临的问题是使用Hambuger菜单,我有一个框架,可以加载一个页面,其中显示项目的gridview。单击后,它会在该框架中显示另一个页面 新页面有这样一个功能,我可以在页面中显示数据,没有任何问题C# 从框架中页面上的用户控件访问DataContext时出现问题,c#,wpf,xaml,user-controls,uwp,C#,Wpf,Xaml,User Controls,Uwp,我一直在努力寻找解决这个问题的方法,我有一个UWP应用程序,我一直在玩弄它,并且大部分时间都能解决问题 我面临的问题是使用Hambuger菜单,我有一个框架,可以加载一个页面,其中显示项目的gridview。单击后,它会在该框架中显示另一个页面 新页面有这样一个功能,我可以在页面中显示数据,没有任何问题 public sealed partial class CreatureDossier : Page { private Species Cat; public Creatur
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 />
CreatureDossier.xaml
<TextBlock x:Name="CreatureName" Text="{x:Bind Cat.name}" />
<UIControls:DossierPanel />
理解我需要做什么的任何帮助都将非常有用。设置
页面的DataContext
:
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属性),您应该能够绑定到物种
类的任何公共属性,如下所示:
<TextBlock x:Name="CatName" Text="{Binding name}" />
…并将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;
}
}
这似乎不起作用,但它将DataContext设置为Cat。此页面已具有在此之前显示信息的数据。另一方面,用户控件仍将DataContext显示为null。我应该使用DP的初始方式将Cat对象传递给UserControl吗?最初我有一个公共密封的部分类DossierPanel:UserControl{public Models.Species Cat{get{return this.DataContext as Models.Species;}}}public DossierPanel(){this.InitializeComponent();}}}您不应该设置DossierPanel的DataContext。你在这么做吗?请阅读此内容并相应修改您的问题:不,我没有在档案面板中设置DataContext,有一个只读属性返回数据,就是它。再次,您需要向任何人提供所有相关的代码段,以便他们能够帮助您找出错误所在。请编辑问题以反映上一条评论中发布的代码。
<UIControls:DossierPanel x:Name="uc" />
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;
}
}
<TextBlock x:Name="CatName" Text="{Binding Cat.name, Mode=OneWay}" />