Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从框架中页面上的用户控件访问DataContext时出现问题_C#_Wpf_Xaml_User Controls_Uwp - Fatal编程技术网

C# 从框架中页面上的用户控件访问DataContext时出现问题

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

我一直在努力寻找解决这个问题的方法,我有一个UWP应用程序,我一直在玩弄它,并且大部分时间都能解决问题

我面临的问题是使用Hambuger菜单,我有一个框架,可以加载一个页面,其中显示项目的gridview。单击后,它会在该框架中显示另一个页面

新页面有这样一个功能,我可以在页面中显示数据,没有任何问题

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}" />