In Kontrollen zu leeren Zellen in einem Raster, die für eine Listview das Itemspaneltemplate ist

StackOverflow https://stackoverflow.com/questions/3885625

Frage

Ich habe eine WPF-Listview, das ein Gitter als Itemspaneltemplate hat. Ich zeige meine Einzelteile in der richtigen Spalte und Zeile auf der Grundlage einer Eigenschaft des Elements. Aber ich möchte einige Kontrollen in den leeren Zellen meines Gitter bringen.

Dies ist eine vereinfachte Version von meinem Code und XAML:

In den Ressourcen:

<ItemsPanelTemplate x:Key="TheTemplate">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="1*"/>
            <RowDefinition Height="1*"/>
        </Grid.RowDefinitions>
    </Grid>
</ItemsPanelTemplate>

In der XAML:

<Controls:CustomListView ItemsSource="{Binding TheCollection}"
                            ItemsPanel="{DynamicResource TheTemplate}">
</Controls:CustomListView>

Schließlich in meinem CustomListView:

protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
    base.PrepareContainerForItemOverride(element, item);
    var viewModel = item as DomainObject;
    if (viewModel != null)
    {
        element.SetValue(Grid.ColumnProperty, 1); //here I work with a converter, but this just simplifies it for StackOverflow
        element.SetValue(Grid.RowProperty, 1);
    }
}

. HINWEIS: Ich weiß, dass ich zu einem Domainobject bin Casting, aber nur mit mir tragen, bitte

Was mir geben wird, ist ein Gitter mit Elementen in der richtigen Zeile und Spalte. Aber was, wenn ich will Anzeige etwas in die leeren Zellen, zum Beispiel ein Text wie ‚Null‘?

Ich kann nicht einfach fügen Sie es zu meiner Vorlage, denn das ist die Anwendung abstürzt, sagen die Items die notwendigen Kontrollen erstellen. Ich habe versucht, das Netz / Vorlage in Code-Behind-Zugriff, kann aber durchaus nicht finden, wie. Vielleicht sollte ich nicht das Listview verwenden? Vielleicht gibt es andere / bessere Lösungen?

War es hilfreich?

Lösung

Was ich am Ende tun war:

  • Erstellen Sie eine Grid mit allen meinen ColumnDefinitions und RowDefinitions (ich weiß, wie viele ich brauche)
  • Im Code-behind meiner Ansicht, warf ich meine Datacontext zu dem, was ich weiß, dass es
  • sein
  • I Iterierte über die Sammlung, und für jedes Element, erstelle ich eine neue Steuerung und legen Sie den Datacontext auf das Element
  • Ich habe dann die RowProperty und COLUMN gesetzt und fügen Sie diese Steuerung an das Grid
  • ich auch daran erinnern, wo ich all diese Kontrollen hinzugefügt, so dass ich leer Kontrollen an den Grid hinzufügen können, wo es nicht noch.

Das ist, was ich denke, ich aus Performance-Gründen ändern:  -. Statt Iteration über die Sammlung von Gegenständen, Iterierte über alle möglichen Zellen des Grid, fügen Sie ein Control (immer), und die Datacontext gesetzt, wenn ein entsprechender Artikel ist

Der Grund, dies zu tun, ist die Leistung. Es dauert etwa 2 secondes das Raster zu füllen, und ich würde es gerne schneller sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top