0

我正在尝试 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 的标题Filename,它们都是 MyApp.Document,其中 MyApp 是我的命名空间。

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

在 MyApp.exe 中的 0x0004CE1E 处引发异常:0xC0000005:访问冲突读取位置 0x00000000。

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

4

1 回答 1

1

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

[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>

于 2015-08-07T04:19:31.487 回答