【问题标题】:Problems when using DataTemplate in a UWP app (crashing, data not being set)在 UWP 应用中使用 DataTemplate 时出现问题(崩溃、未设置数据)
【发布时间】:2015-10-30 08:08:08
【问题描述】:

我正在尝试 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。

关于我在这里做错了什么有什么意见吗?

【问题讨论】:

    标签: c++ xaml data-binding uwp


    【解决方案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>
    

    【讨论】:

    • 非常感谢,我已经介绍了前两个,我应该提到这些,但是更新的 XAML 解决了我的两个问题。知道为什么我一直使用的不正确方法部分起作用但随后会崩溃吗?
    • @WilliamJones 根据您提供的代码,它不应该崩溃。可能是其他代码造成的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 2019-07-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    相关资源
    最近更新 更多