在 UWP 应用程序中使用 DataTemplate 时出现问题(崩溃,未设置数据)

Problems when using DataTemplate in a UWP app (crashing, data not being set)

我正在尝试 Windows 10 UWP 应用程序开发。我已经安装了 Visual Studio 2015,目前正在尝试弄清楚如何使用数据绑定。

以下是我的简单XAML:

<Grid>
    <Pivot x:Name="docPivot"
           ItemsSource="{Binding}">
        <Pivot.ItemTemplate>
            <DataTemplate>
                <PivotItem Header="{Binding Filename}">
                    <TextBox Text="{Binding Contents}"/>
                </PivotItem>
            </DataTemplate>
        </Pivot.ItemTemplate>
    </Pivot>
</Grid>

这是我在相关部分的 Mainpage.xaml.cpp:(文档是一个简单的结构,只有两个属性,一个字符串文件名和一个字符串内容。)

MainPage::MainPage()
{
    InitializeComponent();

    auto docs = ref new Vector<Document^>();
    auto doc1 = ref new Document();
    doc1->Filename = "Filename1";
    doc1->Contents = "Contents 1";
    docs->Append(doc1);
    auto doc2 = ref new Document();
    doc2->Filename = "Filename2";
    doc2->Contents = "Contents 2";
    docs->Append(doc2);
    docPivot->ItemsSource = docs;
}

但是,我遇到了两个无法解决的问题:

首先,不是每个 PivotItem 的 header 都是 Filename,它们都是 MyApp.Document,其中 MyApp 是我的命名空间。

第二个问题是,TextBox 正在使用数据绑定的内容正确填充,并且可以在两个 PivotItems 之间切换,但是一旦我尝试 select 一个 Textbox,应用程序因访问冲突而崩溃:

Exception thrown at 0x0004CE1E in MyApp.exe: 0xC0000005: Access violation reading location 0x00000000.

关于我在这里做错了什么的任何意见?

首先,您必须将 Bindable 属性添加到 Document class。

[Windows::UI::Xaml::Data::Bindable]
public ref class Document sealed

而且你必须添加

#include "Document.h"

Mainpage.xaml.h 文件中而不是 .cpp 文件中。你的 Pivot 的 ItemTemplate 不应该包含 PivotItem,你应该这样做

<Grid>
<Pivot x:Name="docPivot">
    <Pivot.HeaderTemplate>
        <DataTemplate>
            <ContentControl Content="{Binding Filename}"/>
        </DataTemplate>
    </Pivot.HeaderTemplate>
    <Pivot.ItemTemplate>
        <DataTemplate>
            <TextBox Text="{Binding Contents}"/>
        </DataTemplate>
    </Pivot.ItemTemplate>
</Pivot>