web-dev-qa-db-ja.com

C#のWPF DataGridに辞書<String、String>を入力する

C#のDataGridに辞書を入力したいと思います。すでに辞書をDataGridのItemsSourceとして設定しています。しかし、データは表示されません... AutoGenerateColumnsもtrueに設定しました。間違いはどこにありますか?前もって感謝します

18
Caro

列を明示的に指定してみてください。

<DataGrid.Columns>
    <DataGridTextColumn Header="Key" Binding="{Binding Key}" />
    <DataGridTextColumn Header="Value" Binding="{Binding Value}" />
</DataGrid.Columns>
24
Thomas Levesque

以下は私のために働きます。列を明示的に設定する必要はありません。

XAML

<Window x:Class="DictionaryDataGridDemo.SingleDictView"
        xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:DictionaryDataGridDemo"
        Title="SingleDictView"
        Width="525"
        Height="350">
    <Window.DataContext>
        <local:SingleDictViewModel />
    </Window.DataContext>
    <Grid>
        <DataGrid HorizontalAlignment="Stretch"
                  VerticalAlignment="Stretch"
                  AutoGenerateColumns="True"
                  ItemsSource="{Binding MyDictionary}">
            <!--<DataGrid.Columns>
                <DataGridTextColumn Header="Key" Binding="{Binding Key}" />
                <DataGridTextColumn Header="Value" Binding="{Binding Value}" />
            </DataGrid.Columns>-->
        </DataGrid>
    </Grid>
</Window>

ViewModel

using System.Collections.Generic;

namespace DictionaryDataGridDemo
{
    public class SingleDictViewModel
    {
        public Dictionary<double, string> MyDictionary { get; set; }

        public SingleDictViewModel()
        {
            MyDictionary = new Dictionary<double, string>();
            MyDictionary.Add(100, "A100");
            MyDictionary.Add(200, "B200");
            MyDictionary.Add(300, "C300");
        }
    }
}
7
Jeson Martajaya

AutoGenerateColumnsがFalseに設定されていることを確認してください。

    <DataGrid
              AutoGenerateColumns="False"
              ItemsSource="{Binding MyDictionary}">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Key" Binding="{Binding Key}" />
            <DataGridTextColumn Header="Value" Binding="{Binding Value}" />
        </DataGrid.Columns>
    </DataGrid>
0
icernos