1

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のないレイアウトが表示されます。

私はいくつかのことを試し、フォーラムで解決策を探しましたが、この特別な星座を持っている人は誰もいないようです。誰かが私を助けてくれますか?

4

1 に答える 1

0

DesignDataファイル「/SampleData/BlendableAttributesSampleData.xaml」のビルド アクションを構成しましたか? はいの場合、Visual Studio デザイナーはDataColumnFeatureAttributeサンプル データの型のオブジェクトを作成せず、代わりに型のプロキシ オブジェクト_.di0.DataColumnFeatureAttribute(または同様のもの) を作成します。したがって、 yourのプロパティはプロキシ タイプとは別のタイプを参照するため、 yourDataTemplateは使用されません。DataTypeDataTemplate

その問題を解決するために、ビルド アクションを に変更できますDesignDataWithDesignTimeCreatableTypes(これには、DataColumnFeatureAttributeクラスに既定のコンストラクターが必要です)。

または、 を使用できない場合は、次のようDesignDataWithDesignTimeCreatableTypesにプロパティd:IsDesignTimeCreatableをに設定Falseします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 に答える