Hoi,
ich bin jetzt bereits schon die ganze Woche am suchen und finde einfach nix was mir da weiterhelfen könnte. Und zwar möchte ich über die xaml.cs-Datei an eine CollectionViewSource herankommen, welche sich im Resource-Bereich eines Grids befindet, welches sich wiederrum in einem ContentTemplate in einem ResourceDictionary befindet. Die CodeBehind-Datei gehört zur ResourceDatei.
Ich habs zwar schon geschafft an die CollectionViewSource zu kommen, aber aus irgendeinem Grund ist die leer (sprich CollectionViewSource.View ist null). Kann mir vielleicht jemand sagen, ob ich das ganze falsch angehe und mir vielleicht nen Ansatz nennen, wie es richtig sein müsste? Bei Google finde ich irgendwie nix dazu.
So versuche ich es derzeit:
ControlTemplate template = this["LeistungserbringerVertraegeTemplate"] as ControlTemplate;
Grid grid = template.LoadContent() as Grid;
//ListBox box = grid.FindName("lb_Vertraege") as ListBox;
CollectionViewSource viewSource = grid.FindResource("VertraegeSource") as CollectionViewSource;
viewSource.SortDescriptions.Clear();
viewSource.SortDescriptions.Add(new System.ComponentModel.SortDescription("VertragsID", System.ComponentModel.ListSortDirection.Ascending));
viewSource.View.Refresh();
<Grid>
<Grid.Resources>
<CollectionViewSource Source="{Binding Path=Vertraege}" x:Key="VertraegeSource">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="Vertrag.Gruppe.ID" Direction="Ascending" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Grid.Resources>
[...]
<ListBox Name="lb_Vertraege" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="3" ItemTemplate="{StaticResource VertragsListBoxTemplate}" ItemsSource="{Binding Source={StaticResource VertraegeSource}}" ScrollViewer.VerticalScrollBarVisibility="Visible" />
</Grid>
Vielen Dank euch schon mal im Voraus.
Lg
Maliko
Hallo Maliko,
wenn du schon Databinding verwendet...wieso willst du im CodeBehind noch sowas anstellen?
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
Das Problem das ich habe ist, das ich eine ListBox und kein DataGrid oder GridView verwende und daher die Überschriften (ich missbrauche die ListBox als Grid) Labels sind. Mit einem Klick auf das Label soll allerdings nach der entsprechenden Spalte sortiert werden.
Der C#-Code steht im MousLeftButtonUp-Event des Labels.
Hi Maliko,
meiner Meinung nach mißbrauchst du nicht nur die Steuerelemente, sondern überhaupt WPF 😕
Dein Anwendungsfall ist, wenn ich es richtig verstanden habe, eine Liste mit Objekten nach unterschiedlichen Eigenschaften zu sortieren. Wenn du dafür (wie du selbst schreibst) eine Woche benötigst und dann per CodeBehind auf Templates zugreifen mußt, hast du irgendetwas Grundlegendes nicht verstanden.
Meine Tips wären: Verwende die Steuerelemente, die deinen Anforderungen entsprechen, also z.B. ein DataGrid. Verwende MVVM, dann kannst du mit ViewModels, ObservableCollections und Commands arbeiten, anstatt mit solchen Konstrukten wie in deinem Beispielcode.
Christian
Weeks of programming can save you hours of planning
Ich würde das DataGrid gerne nutzen, dies ist allerdings nicht möglich, da ich im Grid ein weiteres Grid anzeige, welches über alle Zeilen geht (sprich ich hab eine Zeile als Grid, und darunter ein weiteres Grid).
Davon mal abgesehen arbeite ich erst ne Woche mit WPF (ich komme aus dem WinForms-Sektor).
Hi Maliko,
das Szenario, welches Du beschreibst hoert sich nach Master-Detail DataGrid an. Schau mal hier, ob das was fuer Dich ist: Master-Detail-Wpf
Gruss,
DaMoe