WPF binding List> to a ListBox

2019-09-04 17:15发布

问题:

var list = new List<Dictionary<string, string>>{
                new Dictionary<string,string>{
                    {"id","1"},
                    {"name","foo"},
                }, 
                new Dictionary<string,string>{
                    {"id","2"},
                    {"name","bar"},
                }
            };

I want to bind this list to a listbox. It's quite simple:

listBox.ItemsSource=list;

but the problem is: I can't control what is displayed in the listbox. What I want is to display is dict["name"]. I tried:

listbox.DisplayMemberPath="name"

Sadly it doesn't work.

回答1:

Your code tries to display a property called name on the dictionary, which doesn't exist. To access an indexer use the following syntax:

listBox.DisplayMemberPath = "[name]";

Also, you should be probably setting things like this directly in XAML, not in code-behind.



回答2:

I figured it out:

<ListBox HorizontalAlignment="Left" Margin="8,35,0,77" Width="88" Name="mainListBox">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Label Content="{Binding Path=[name]}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

pay attention to <Label Content="{Binding Path=[name]}" />, it does all the magic.

hope this help somebody in the future :)