Ich würde folgenden Ansatz versuchen:
A) Sie müssen das Listenfeld in der Gitteransicht anzeigen lassen - ich glaube, das haben Sie bereits getan
B) einen Stil für GridViewColumnHeader definieren:
<Style TargetType="{x:Type GridViewColumnHeader}" x:Key="gridViewColumnStyle">
<EventSetter Event="Click" Handler="OnHeaderClicked"/>
<EventSetter Event="Loaded" Handler="OnHeaderLoaded"/>
</Style>
In meinem Fall hatte ich eine ganze Reihe von anderen Eigenschaften eingestellt, aber im Basisszenario - Sie würden Loaded Ereignis benötigen. Geklickt - dies ist nützlich, wenn Sie Sortier- und Filterfunktionen hinzufügen möchten.
C) Binden Sie in Ihrem Listview-Code die Vorlage mit Ihrem Gridview:
public MyListView()
{
InitializeComponent();
GridView gridViewHeader = this.listView.View as GridView;
System.Diagnostics.Debug.Assert(gridViewHeader != null, "Expected ListView.View should be GridView");
if (null != gridViewHeader)
{
gridViewHeader.ColumnHeaderContainerStyle = (Style)this.FindResource("gridViewColumnStyle");
}
}
D) dann in Ihrem OnHeaderLoaded-Handler, können Sie eine geeignete Vorlage auf der Grundlage der Daten der Spalte festlegen
void OnHeaderLoaded(object sender, RoutedEventArgs e)
{
GridViewColumnHeader header = (GridViewColumnHeader)sender;
GridViewColumn column = header.Column;
//Wählen Sie hier Ihre Datenvorlage aus und wenden Sie sie an.
e.Handled = true;
}
E) Ich schätze, Sie müssten auch das Eigentum an der ItemsSource-Abhängigkeitseigenschaft erwerben und ihr Änderungsereignis behandeln.
ListView.ItemsSourceProperty.AddOwner(typeof(MyListView), new PropertyMetadata(OnItemsSourceChanged));
static void OnItemsSourceChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
MyListView view = (MyListView)sender;
//do reflection to get column names and types
//and for each column, add it to your grid view:
GridViewColumn column = new GridViewColumn();
//set column properties here...
view.Columns.Add(column);
}
die GridViewColumn-Klasse selbst hat nicht viele Eigenschaften, so dass Sie vielleicht einige Informationen dort mit angehängten Eigenschaften hinzufügen möchten - d.h. wie eindeutige Spalte Tag - Kopfzeile höchstwahrscheinlich für die Lokalisierung verwendet werden, und Sie werden nicht auf diese weitergeben.
Im Allgemeinen können Sie mit diesem Ansatz, auch wenn er recht kompliziert ist, die Funktionalität Ihrer Listenansicht leicht erweitern.