我的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的数据没有问题,但在设计时
我已经尝试了一些事情,并在论坛中寻找解决方案,但似乎没有人有这个特殊的星座。有人能帮帮我吗?
答案 0 :(得分:0)
您是否为文件“/SampleData/BlendableAttributesSampleData.xaml”配置了构建操作DesignData
?如果是,则Visual Studio设计器不会为您的示例数据创建类型为DataColumnFeatureAttribute
的对象,而是为_.di0.DataColumnFeatureAttribute
类型的代理对象(或类似的东西)创建。因此,您的DataTemplate
未使用,因为DataType
的{{1}}属性是指代理类型以外的其他类型。
您可以将构建操作更改为DataTemplate
以解决该问题(这要求DesignDataWithDesignTimeCreatableTypes
类具有默认构造函数。)
或者,如果您无法使用DataColumnFeatureAttribute
,请在DesignDataWithDesignTimeCreatableTypes
中将属性d:IsDesignTimeCreatable
设置为False
,如下所示:
DataTemplate