x:绑定设计时间问题

时间:2015-12-05 14:29:32

标签: binding datatemplate uwp designer xbind

我正在尝试构建我的UWP应用程序,并且当尝试将DataTemplate与x:Bind一起使用在资源字典中时,目前我遇到了设计器异常。

我创建了一个资源字典" ItemTemplates.xaml"使用相应的代码隐藏(以确保x:绑定初始化)。该文件只包含一个模板:

<DataTemplate x:Key="HomeViewCategoryListItemTemplate" x:DataType="models:Category">
    <Button Background="#88333333" Height="110" VerticalContentAlignment="Top" Padding="10" HorizontalAlignment="Stretch">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="Auto" />
            </Grid.RowDefinitions>
            <TextBlock FontWeight="Light" HorizontalAlignment="Center" Text="{x:Bind Name}" FontSize="{ThemeResource TextStyleExtraLargeFontSize}" />
            <TextBlock Foreground="{ThemeResource ToolTipForegroundThemeBrush}" HorizontalAlignment="Center" Margin="0,10,0,0" Text="{x:Bind Description}" Grid.Row="1" TextAlignment="Center" TextWrapping="Wrap" />
        </Grid>
    </Button>
</DataTemplate>

然后我将此资源字典添加到App.xaml中,如下所示:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ms-appx:///Resources/Core.xaml" />
            <resources:ItemTemplates />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

现在项目无法使用,因为设计师抛出了奇怪的异常,但是当我清理并重建项目并导航到HomeView.xaml页面时,设计师只显示默认的&#34; ToString()&#34; ListView中的项目(基本上列表视图只包含文本的三倍&#34; Models.Categories&#34;)和ListView的 ItemTemplate 属性加下划线并显示以下错误:

The resource "HomeViewCategoryListItemTemplate" could not be resolved.

当我导航回App.xaml时,我看到另一个下划线(<resources:ItemTemplates />行),表示:

The property 'DataType' was not found in type 'DataTemplate'.

这两个错误都是非感性的,因为当我实际运行应用程序时,没有任何问题,一切都运行良好。到目前为止,我发现的唯一解决方法是以经典方式和&#34;编译&#34;两次包含ResourceDictionary。方式:

<ResourceDictionary Source="ItemTemplates.xaml" />
<resoures:ItemTemplates />

这个解决方案有效,然后一切都在设计时和运行时都有效,但我认为它非常混乱,必须有更好,更安全的方法,或者我错过了一些微不足道的东西。

我正在运行Visual Studio 2015 Update 1并安装了最新的UWP SDK。该项目的目标是建立10240。

编辑: 设计师经常抛出并完全崩溃的另一个例外:

 Unable to cast object of type 'System.String' to type 'Models.Data.Categories.Category'.

根据StackTrace输出,这发生在ItemTemplates.xaml.cs代码中 - 特别是生成的方法ProcessBindings。同样,该项目仍然可以编译并正常运行,但设计人员甚至不愿意尝试显示输出。

1 个答案:

答案 0 :(得分:0)

对于当前版本,更喜欢Binding over x:Bind

an answer from a Microsoft engineers

我遇到了和你一样的问题,加上使用x时的大量错误:在设计时绑定。最快的修复方法:使用Binding作为旧时间。当您发布时,如果正在考虑性能,请将绑定更改为x:Bind