XAMLには次のコンステレーションがあります。
<ListBox x:Uid="attributesListBox"
DataContext="{Binding Source={StaticResource EditFeatureWithForeignKeyAttributesViewModel}}" ItemsSource="{Binding Path=Attributes}"
d:DataContext="{d:DesignData /SampleData/BlendableAttributesSampleData.xaml}">
</ListBox>
次のDataTemplateは、DataTypeを介して適用されます。
<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を適用する必要があります。
したがって、実行時にVMからのデータに問題はありませんが、設計時には問題はありません。
- Expression BlendはSampleDataを表示しますが、ページ全体を見るとDataTemplateを適用していません
- 一方、リソースに移動してDataTemplateを編集すると、SampleDataのないレイアウトが表示されます。
私はいくつかのことを試し、フォーラムで解決策を探しましたが、この特別な星座を持っている人は誰もいないようです。誰かが私を助けてくれますか?