1

RowDetails (テキストブロック) がDetailsグリッドの ItemSource 要素の文字列プロパティにバインドされる WPF Datagrid を設計しようとしています。

   <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Details}" .....
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>

秘訣は、バインドされたコレクション内の要素にプロパティがない可能性があるDetailsことです。その場合、RowDetails は空にする必要があります。例外をスローせずに、実行時に存在しない可能性のあるプロパティに WPF をバインドする方法はありますか? (明確にするために、バインドされたコレクション内のアイテムはすべてDetailsプロパティを持つか、すべて持たないかのいずれかです。複数のオブジェクト タイプを保持するコレクションについて話しているのではありません。)

1 つの答えは、このグリッドのユーザーに、常に Details プロパティ (IDetails インターフェイスなど) を持つオブジェクトを提供するように強制することだと思いますが、これを行う必要がないのはいいことだと思います - グリッドを表示できるオブジェクトは非常に柔軟です。

4

1 に答える 1

1

よく見て回った後、私はPriorityBindingsを発見しました。これは仕事を成し遂げます。ここでは、RowDetailsTemplate内のTextBlockにバインドしており、バインドされたプロパティが見つからない場合は、Fallbackvalueを空の文字列に設定します。

<TextBlock.Text>
    <PriorityBinding FallbackValue="">
           <Binding Path="Details" IsAsync="True"/>
    </PriorityBinding>
</TextBlock.Text>
于 2013-03-14T18:18:33.880 に答える