2

私はWPFが初めてで、dataGrid. 表示しようとしているデータの一部は画像です。最初に、次のようにデータをバインドしようとしました:

DataGrid.ItemsSource = <some collection>

これにより、画像が表示されず、画像へのパスを含む列が作成されました。

私はグーグルで検索を開始し、次のことを思いつきました:
データ テンプレートを作成しました:

<DataTemplate x:Key="ImageDataTemplate">
    <Image Source="{Binding Image}"/>
</DataTemplate>

イベントに関数を追加し、AutoGeneratingColumnそこに次のコードを配置しました。

if (typeof(System.Windows.Media.ImageSource).IsAssignableFrom(e.PropertyType))
{
    DataGridTemplateColumn dgtc = new DataGridTemplateColumn();
    dgtc.Header = e.Column.Header;
    dgtc.CellTemplate = this.FindResource("ImageDataTemplate") as DataTemplate;

    e.Column = dgtc;
}

クラスですべての Image プロパティを呼び出す限り、魔女はうまく機能Imageします。もう少し柔軟にする方法はありますか? (クラスにいくつかの画像が必要な場合、または画像プロパティに意味のある完全な名前が必要な場合があり、ほとんど重複したコードは好きではありません)

4

4 に答える 4

0

それは非常に誤解を招くタイトルです。「不明」という言葉が質問のどこにもないのを見てください。いずれにせよ、これDataGridはやや複雑なコントロールであり、WPF で慣習的であるように XAML でどのように表示するかを単純に定義するのではなく、C# コードを使用して操作することにより、WinForms の観点から見ているようです。

続行する前に、WPF の方法でそれを使用する方法に関するいくつかのチュートリアルを読むことを強くお勧めします...そのようなチュートリアルはたくさんありますが、 WPF Tutorials.NETのWPF DataGrid Controlは、開始するのに適したものです。 .

つまり、リンクされたチュートリアルから、各列の内容が XAML でどのように表示されるかを定義できます。

<DataGrid ItemsSource="{Binding Customers}" AutoGenerateColumns="False" >
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Image" Width="SizeToCells" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Image Source="{Binding Image}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>
于 2013-10-11T09:37:06.053 に答える
0

個人的には、データグリッドのAutoGenerateColumnsプロパティを に設定しfalse、XAML で列を手動で作成します。

AutoGenerateColumnsそれほど有用なIMOではありません。多くの場合、モデルには列に表示しないプロパティがあり、AutoGeneratingColumnイベントのハンドラーによって終了した場合、列表示のコードを記述しないという利点が失われます。

于 2013-10-11T09:39:45.260 に答える