0

WinformsアプリをWPFアプリに変換しようとしていて、次のコードがあります:

ObservableCollection<Dictionary<string, string>> PlatypusDict =
    new ObservableCollection<Dictionary<string, string>>();
. . .
PlatypusDict = PlatypusData.getPlatypusAccountsForCentury(Convert.ToInt32(labelPlatypusName.Tag));

...これにより、次のエラーメッセージが表示されます。

タイプ 'System.Collections.Generic.Dictionary' を 'System.Collections.ObjectModel.ObservableCollection>' に暗黙的に変換することはできません

...そして、これは何の役にも立ちません:

PlatypusDict = (System.Collections.ObjectModel.ObservableCollection<System.Collections.Generic.Dictionary<string, string>>)PlatypusData.getPlatypusAccountsForCentury(Convert.ToInt32(labelPlatypusName.Tag));

ObservableCollection を使用して ListView をバインドする必要はありませんか、またはここでの回避策/適切な方法論は何ですか?

4

1 に答える 1

2

Dictionary を ListView にバインドするだけです。

例:

XAML ファイル:

<Window x:Class="BindingDictionaryLB.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListView ItemsSource="{Binding}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel>
                        <TextBlock Margin="2" Text="{Binding Key}" />
                        <TextBlock Margin="2" Text="{Binding Value}" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>    
    </Grid>
</Window>

コード ビハインド ファイル:

using System.Collections.Generic;
using System.Windows;

namespace BindingDictionaryLB
{    
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            Dictionary<string, string> _source = new Dictionary<string, string>();
            for (int i = 0; i < 5; i++)
            {
                _source.Add("key_" + i, "value_" + i);
            }

            this.DataContext = _source;
        }
    }
}
于 2012-07-30T21:08:41.070 に答える