将ListView的GridView绑定到List <keyvaluepair>

时间:2016-01-10 18:29:15

标签: wpf gridview data-binding

以下是我制作GridView的方法:

ListView将包含Entry个对象,如下所示:

public class Entry
{
    public Entry(BitmapImage icon = null, List<EntryKeyValuePair> entryKeyValuePairs = null)
    {
        Icon = icon;
        EntryKeyValuePairs = entryKeyValuePairs ?? new List<EntryKeyValuePair>();
    }

    public BitmapImage Icon { get; set; }
    public List<EntryKeyValuePair> EntryKeyValuePairs { get; }
}

EntryKeyValuePair只是KeyValuePair<string,string>,其中Key是列,Value是列的值。我使用了KeyValuePair列表,因为我想保留插入顺序。无论如何,这里是我如何构建GridView。

GridView = new GridView();
foreach (Column column in Category.Columns.Where(c => c.IsVisibleInTable)) {
    var gridViewColumn = new GridViewColumn {
        Header = column.Name,
        DisplayMemberBinding = new Binding($"EntryKeyValuePairs[{column.Name}].Value")
    };
    GridView.Columns.Add(gridViewColumn);
}

我不知道DisplayMemberBinding中设置的绑定。如果EntryKeyValuePairs是字典,则上述绑定将起作用。但就我而言,事实并非如此。

如果我能以某种方式访问​​数据对象,我可以

DisplayMemberBinding = new Binding($"EntryKeyValuePairs[{entry.EntryKeyValuePairs.FindIndex(p => p.Key == column.Name)}].Value")

如何在绑定时访问ListView持有的当前数据对象?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我使用了$app->singleton('router', 'App\Your\Router'); 的{​​{1}},以便我可以获得对GridViewColumn绑定对象的引用。以下是CellTemplateSelector的外观。我必须在代码中创建DataTemplates。

ListView

我使用了这个TemplateSelector:

而不是DisplayMemberBinding
CellTemplateSelector

一切都好。希望这有助于某人:)我仍然希望看到比这更好的解决方案。