2012-02-21 42 views
1

我在我的XAML以下星座:预览没有X一个DataTemplate:主要使用Expression Blend中的sampleData绑定到一个列表框

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

下面的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> 

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

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

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

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

回答

0

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

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

另外,如果您不能使用DesignDataWithDesignTimeCreatableTypes,则该属性d:IsDesignTimeCreatableDataTemplate设置为False,像这样:

<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> 
+0

Hi和抱歉这么晚才回复 - 我不知道你的答案到现在为止。 不幸的是,我的系统配置在此期间发生了变化,所以由于许可问题,我无法再构建该项目。当我在一个小型演示应用程序中构建相同星座时,我完全没有问题:DataType自动应用于DataType,即使将SampleData的构建类型设置为DesignData。 在这个更大的项目中可能只是一个愚蠢的副作用。无论如何,感谢您的帮助! – pnolle 2012-08-30 14:52:24

相关问题