以下是我制作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持有的当前数据对象?
答案 0 :(得分:0)
我找到了解决方案。我使用了$app->singleton('router', 'App\Your\Router');
的{{1}},以便我可以获得对GridViewColumn
绑定对象的引用。以下是CellTemplateSelector
的外观。我必须在代码中创建DataTemplates。
ListView
我使用了这个TemplateSelector:
而不是DisplayMemberBindingCellTemplateSelector
一切都好。希望这有助于某人:)我仍然希望看到比这更好的解决方案。