Windows phone 8.1 Windows Phone 8.1集线器模板项目DataContext绑定

Windows phone 8.1 Windows Phone 8.1集线器模板项目DataContext绑定,windows-phone-8.1,Windows Phone 8.1,这可能是一个愚蠢的问题,但我在自己的Windows Phone应用程序中重新创建“Hub App”模板使用的Hub页面数据绑定方法时遇到问题 我的XAML绑定到一个viewmodel类,该类被定义为我的页面对象的公共属性,只要我包含以下行,它就可以正常工作: this.DataContext = *viewmodel object here* 在OnNavigatedTo()方法中 如果我注释掉这一行,则在运行时不会加载任何数据。这听起来很明显,但是(这是我的问题),“Hub App”模板从未

这可能是一个愚蠢的问题,但我在自己的Windows Phone应用程序中重新创建“Hub App”模板使用的Hub页面数据绑定方法时遇到问题

我的XAML绑定到一个viewmodel类,该类被定义为我的页面对象的公共属性,只要我包含以下行,它就可以正常工作:

this.DataContext = *viewmodel object here*
在OnNavigatedTo()方法中

如果我注释掉这一行,则在运行时不会加载任何数据。这听起来很明显,但是(这是我的问题),“Hub App”模板从未在任何.xaml.cs文件中为“This.DataContext”分配对象。绑定仅在XAML中定义。我错过了什么

更新:添加了xaml和xaml.cs

XAML

HubApp模板在xaml中定义绑定:


它的效果与您在构造函数中的效果相同:
this.DataContext=DefaultViewModel


编辑-在评论之后

您的情况没有什么不同-您绑定到“普通”属性,而没有INotifyPropertyChanged、ICollectionChanged或其他。在模板中查看,您会发现那里的绑定被定义为ObservableDictionary——当从该Districtionary中添加/删除项时,它会引发允许更新UI的适当事件。就你而言,没有这样的地方


您的程序是这样工作的-当页面被创建时,因此您已经绑定了DataContext,您的属性getter被调用(放在那里
Debug.WriteLine(“getter”);
),但是您的属性中还没有任何内容,因此UI是空的。不久之后,将调用NavigatedTo(放在那里
Debug.WriteLine(“导航事件”);
),在其中填充属性,但用户界面没有收到通知,因此不会进行更新。

感谢您的响应,我的问题是,这正是我的XAML所做的,我在我的Page类上有一个公共属性,我正在以同样的方式设置它,但是如果没有xaml.cs中的this.DataContext赋值,我在运行时不会加载任何数据。@Apogee您能提供一个关于这个问题的示例吗?@Apogee的情况现在更清楚了-请查看我的编辑。回答很好Romasz,这对我现在来说很有意义。我将继续实现该接口,看看它是否有效。谢谢!:)
<Page
DataContext="{Binding Subject, RelativeSource={RelativeSource Mode=Self}}"
d:DataContext="{d:DesignData Source=SampleData/SubjectSampleData.xaml}">
public sealed partial class BlankPage1 : Page
{
    public BlankPage1()
    {
        this.InitializeComponent();
    }

    public Subject Subject { get; set; }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        if (e.Parameter != null)
        {
            var subjectName = e.Parameter as string;

            var subject = App.MainViewModel.Subjects.Single(item => item.Name == subjectName);

            if (subject != null)
            {
                this.Subject = subject;
            }

            //this.DataContext = this.Subject;
        }
    }
}