我的 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 的布局。
我尝试了一些东西,并在论坛中寻找解决方案,但似乎没有人有这个特殊的星座。有人能帮助我吗?