толковый словарьв WPF GridView - PullRequest
1 голос
/ 28 июня 2010

Я бы хотел связать Dictionary<string, List<int>> с GridView в ListView, и мне не очень повезло.

Я смотрел на этот вопрос: wpf-binding-dictionarystring-liststring-to-listview-listbox-how , и этот вопрос: Dictionary-привязка-к-listview

Но я не уверен, как принять ихкод и заставить его работать для меня.

Вот что я пробовал:

XAML:

<Window x:Class="WpfIdeas.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="315">
    <Grid x:Name="theGrid">
        <ListView x:Name="lv">
        </ListView>
    </Grid>
</Window>

C #:

public partial class Window1 : Window
{
    private Dictionary<string, List<int>> lists = new Dictionary<string, List<int>>();
    public Window1()
    {
        InitializeComponent();
        lists["a"] = new List<int>(new int[] {1, 2, 3, 4, 5});
        lists["b"] = new List<int>(new int[] { 6, 7, 8, 9});
        lists["c"] = new List<int>(new int[] { 1, 2, 3, 4, 5 });

        GridView gv = new GridView();
        foreach(string k in lists.Keys)
        {
            Binding binding = new Binding("[" + k + "]");
            gv.Columns.Add(new GridViewColumn
                               {
                                   DisplayMemberBinding = binding,
                                   Header = k,
                                   Width = 100
                               });
        }

        lv.ItemsSource = lists;
        lv.View = gv;
    }
}

Какможно ли отобразить списки в окне под соответствующими заголовками?

Ответы [ 2 ]

1 голос
/ 28 июня 2010

Если вы в порядке с использованием XAML вместо кода позади, посмотрите этот пример:

Проблема с MVVM.Динамический список сеток

0 голосов
/ 29 июня 2010

Я нашел решение, но надеюсь, что есть лучший способ:

XAML:

<Window x:Class="WpfIdeas.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="315">
    <Window.Resources>
        <XmlDataProvider x:Key="xdp"></XmlDataProvider>
    </Window.Resources>
    <Grid x:Name="theGrid">
        <ListView x:Name="lv" ItemsSource="{Binding Source={StaticResource xdp}, XPath=/rows/row}">
            <ListView.View>
                <GridView x:Name="gv">
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

C #:

public partial class Window1 : Window
    {
        protected Dictionary<string, List<int>> lists = new Dictionary<string, List<int>>();
        public Window1()
        {
            InitializeComponent();
            lists["a"] = new List<int>(new int[] {1, 2, 3, 4, 5});
            lists["b"] = new List<int>(new int[] {6, 7, 8, 9});
            lists["c"] = new List<int>(new int[] {1, 2, 3, 4, 5});

            XDocument data = new XDocument();
            data.Add(new XElement("rows"));

            int maxListLength = lists.Max(l => l.Value.Count);

            for (int index = 0; index < maxListLength; ++index )
            {
                XElement row = new XElement("row");
                foreach(string k in lists.Keys)
                {
                    XElement value = new XElement(k);
                    if(index < lists[k].Count)
                    {
                        value.Value = lists[k][index].ToString();
                    }
                    row.Add(value);
                }
                data.Root.Add(row);
            }

            (Resources["xdp"] as XmlDataProvider).Document = new XmlDocument{InnerXml = data.ToString()};

            foreach (string key in lists.Keys)
            {
                GridViewColumn gvc = new GridViewColumn();
                gvc.Header = key;
                gvc.Width = 75;
                gvc.DisplayMemberBinding = new Binding { XPath = key };
                gv.Columns.Add(gvc);
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...