使用绑定到ListBox的Expression Blend SampleData预览不带x:Key的DataTemplate

时间:2012-02-21 17:02:03

标签: xaml datatemplate expression-blend sample-data

我的XAML中有以下星座:

<ListBox x:Uid="attributesListBox" 
    DataContext="{Binding Source={StaticResource EditFeatureWithForeignKeyAttributesViewModel}}" ItemsSource="{Binding Path=Attributes}" 
    d:DataContext="{d:DesignData /SampleData/BlendableAttributesSampleData.xaml}">
</ListBox>

通过DataType应用以下DataTemplate:

<DataTemplate x:Uid="dataColumnFeatureAttributeDataTemplate" DataType="{x:Type DataColumnFeatureAttribute}">
    <!-- ... opens a button and a grid ... -->
            <TextBlock Text="{Binding EditCaption}" />
    <!-- ... closes button and grid ... -->
</DataTemplate>

正如“备注”部分中的here所解释的那样,隐式生成了x:Key,并且“DataTemplate会自动应用于该类型的数据对象”。

在DataTemplate中,绑定了列表项的几个简单属性。在我的SampleData的摘录中,您将找到上面引用的EditCaption属性 - 它是一个简单的字符串,ListBox的DataContext和ItemsSource应该适合:

<SampleData:BlendableAttributes xmlns:SampleData="clr-namespace:Commons.Mobile.SampleData">
    <SampleData:BlendableAttributes.Attributes>
        <Mobile_Client:FeatureAttribute DisplayCaption="Vestibulum adipiscing curabitur" DisplayString="Class maecenas parturient" ErrorMessage="Nunc amet aliquam nam sed" EditCaption="Cras phasellus duis" IsEditable="True" IsSearchable="False" IsViewable="True" Modified="False">
            <Mobile_Client:FeatureAttribute.Feature>
                <!-- ... Feature with a lot of properties ...  -->
            </Mobile_Client:FeatureAttribute.Feature>
        </Mobile_Client:FeatureAttribute>
        <!-- ... more FeatureAttributes ... -->
    </SampleData:BlendableAttributes.Attributes>
</SampleData:BlendableAttributes>

如果我通过x:Key引用DataTemplate,则会在预览中正确应用。在这种情况下,这是不可能的,因为列表包含不同类型的对象,因此我必须使用隐式x:Key根据对象类型应用特定的DataTemplate。

因此在运行时使用来自我的VM的数据没有问题,但在设计时

  • Expression Blend显示SampleData,但在查看整个页面时未应用DataTemplate
  • 另一方面,当我转到参考资料并编辑DataTemplate时,我看到没有SampleData的布局。

我已经尝试了一些事情,并在论坛中寻找解决方案,但似乎没有人有这个特殊的星座。有人能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

您是否为文件“/SampleData/BlendableAttributesSampleData.xaml”配置了构建操作DesignData?如果是,则Visual Studio设计器不会为您的示例数据创建类型为DataColumnFeatureAttribute的对象,而是为_.di0.DataColumnFeatureAttribute类型的代理对象(或类似的东西)创建。因此,您的DataTemplate未使用,因为DataType的{​​{1}}属性是指代理类型以外的其他类型。

您可以将构建操作更改为DataTemplate以解决该问题(这要求DesignDataWithDesignTimeCreatableTypes类具有默认构造函数。)

或者,如果您无法使用DataColumnFeatureAttribute,请在DesignDataWithDesignTimeCreatableTypes中将属性d:IsDesignTimeCreatable设置为False,如下所示:

DataTemplate