x:Bind 设计时问题

5

我正在尝试构建我的UWP应用程序,但在尝试在资源字典中使用DataTemplate和x:Bind时,遇到了设计器异常问题。

我创建了一个名为“ItemTemplates.xaml”的资源字典,并创建了相应的代码后台(以确保x:Bind初始化)。该文件仅包含一个模板:

<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页面时,设计师只显示默认的“ToString()”项目(基本上列表视图只包含三个文本“Models.Categories”),我的ListView的ItemTemplate属性被下划线标记并显示以下错误:

The resource "HomeViewCategoryListItemTemplate" could not be resolved.

当我回到App.xaml时,我看到另一个下划线(在<resources:ItemTemplates />一行)下面有一行字,内容是:
The property 'DataType' was not found in type 'DataTemplate'.

两个错误都是无意义的,因为当我实际运行应用程序时,没有任何问题,一切都完美地工作。到目前为止,我找到的唯一解决方法是在经典方式和“编译”方式中分别两次包括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
你的 ItemTemplates 类代码是什么样子的?也许这个指南能帮到你?http://igrali.com/2015/06/14/how-to-use-compiled-bindings-xbind-from-a-resource-dictionary/ - sibbl
3
我听到了你的痛苦。虽然一切都正常运行,但我在使用UWP应用程序时遇到了很多设计问题... - Markus Hütter
sibbl:即使我的ItemTemplates只有简单的'<TextBlock Text="{x:Bind Title}" />'内容,它们也无法正常工作。我已经检查过了,并且按照您提供的指南进行了操作,但仍然没有帮助... - Martin Zikmund
1个回答

0

对于当前版本,建议使用 Binding 而不是 x:Bind

来自 Microsoft 工程师的回答

我遇到了与你相同的问题,而且在设计时使用 x:Bind 时还有大量的错误。最快的解决方法是使用旧式的 Binding。当你发布时,如果性能是考虑因素之一,可以将 Binding 更改为 x:Bind。


你在表达自己更喜欢使用Binding,好像这是由于你的链接和微软的支持。但事实并非如此。在你的链接中,微软的某位成员之所以决定使用Binding,是因为需要使用_设计时数据_,而不是因为在Visual Studio的设计时模式中存在问题。因此,这并没有真正回答问题。 - Markus Hütter
仍有一些属性无法与x:Bind一起使用。 - Hunter Tran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接