1

我的 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>

如“备注”部分中所述隐式生成 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。

所以我的虚拟机的数据在运行时没有问题,但在设计时

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

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

4

1 回答 1

0

DesignData您是否为文件“/SampleData/BlendableAttributesSampleData.xaml”配置了构建操作?如果是,则 Visual Studio 设计器不会DataColumnFeatureAttribute为您的示例数据创建类型对象,而是创建类型的代理对象_.di0.DataColumnFeatureAttribute(或类似的对象)。因此,DataTemplate没有使用 your ,因为DataTypeyour 的属性DataTemplate引用了代理类型之外的另一种类型。

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

或者,如果您不能使用DesignDataWithDesignTimeCreatableTypes,则将属性设置d:IsDesignTimeCreatableFalse您的DataTemplate,如下所示:

<DataTemplate x:Uid="dataColumnFeatureAttributeDataTemplate" 
              DataType="{x:Type DataColumnFeatureAttribute}" 
              d:IsDesignTimeCreatable="False"> 
    <!-- ... opens a button and a grid ... --> 
            <TextBlock Text="{Binding EditCaption}" /> 
    <!-- ... closes button and grid ... --> 
</DataTemplate> 
于 2012-05-26T16:24:15.130 回答