Hallo, liebe Gemeinde,
ich habe ein global verfügbares Mainmodel-Objekt, das einen Datacontext mit (u.a.) einer Tabelle "Personen" enthält. Nach dem Laden wird einer CollectionViewSource (Property PersonenViewSource) diese Tabelle als Source zugewiesen:
Spoiler anzeigen
Die Bindung erfolgt problemlos über Designerunterstützung im Usercontrol.XAML. Alle verfügbaren Eigenschaften werden korrekt beim Einrichten der Bindung angezeigt.
Spoiler anzeigen
Das Datagrid bleibt komischerweise leer. Also habich einen Testbutton eingerichtet, in dem ich die View der PersonenViewSource auflisten lasse. Auch hier erfolgt die korrekte Listung der Namen.
Aber die Datagridview.Itemsource-Eigenschaft ist lt. Debugging Nothing!
Ich habe nun im Sub New des Usercontrol die Datagridview.Itemsource-Eigenschaft= PersonenViewSource.View gesetzt. Jetzt werden die Einträge angezeigt.
Aber warum ist das so?
- Was unterscheidet die Bindung des Datacontext über eine CollectionViewSource im XAML von einer Applicationsweit verfügbaren mit VB erstellten CollectionViewSource?
- Nach dem Laden über einen Button (Laden-Relaycommand) wird diese VB-CollectionViewSource nicht aktualisiert (wegen context.Dispose und context-Neuinstanzierung vermutlich) Im Mainmodel hab ich aber keinen Verweis auf das Control(Datagrid und Co) um die View neu zuzuweisen, und des möcht ich ja eigentlich auch nicht.
Hat da wer nen Tipp, wie ich das gebacken bekomm?
Achso, das warum das ganze hab ich fast vergessen: Ich möchte im applikationsweit verfügbaren Mainmodel-Objekt eine CollectionViewSouce zur Verfügung haben, die ich von jedem Fenster aus binden kann und deren .View.Filter-Eigenschaft ich nutzen kann.
Dank für eure Mühe
Vatter
ich habe ein global verfügbares Mainmodel-Objekt, das einen Datacontext mit (u.a.) einer Tabelle "Personen" enthält. Nach dem Laden wird einer CollectionViewSource (Property PersonenViewSource) diese Tabelle als Source zugewiesen:
VB.NET-Quellcode
- Public Class MainModel
- Public Property PersonenViewSource As New CollectionViewSource
- Public Property Laden As New RelayCommand( _
- Sub()
- If context IsNot Nothing Then context.Dispose()
- context = New MyDataDataContext("Data Source=" & _DataFile.FullName)
- context.Log = Console.Out
- If Not _DataFile.Exists Then
- context.CreateDatabase()
- End If
- PersonenViewSource.Source = context.Personen 'hier erfolgt die Zuweisung
- Debug.Print("**** nach dem Laden:")'und hier wird der Inhalt zum Test (korrekt) ausgegeben
- For Each temp In PersonenViewSource.View
- Dim a As Personen = CType(temp, Personen)
- Debug.Print(a.Vorname & " ; " & a.Name)
- Next
- OnPropertyChanged("context")
- OnPropertyChanged("PersonenViewSource")
- End Sub)
Die Bindung erfolgt problemlos über Designerunterstützung im Usercontrol.XAML. Alle verfügbaren Eigenschaften werden korrekt beim Einrichten der Bindung angezeigt.
XML-Quellcode
- <UserControl x:Class="UC_Personen"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- .
- .blablabla
- .
- xmlns:my="clr-namespace:Dispatcher"
- DataContext="{StaticResource MainModel}">
- <DataGrid Name="DG_Personen"
- Grid.Column="0"
- Grid.Row="1"
- AutoGenerateColumns="false"
- IsSynchronizedWithCurrentItem="True"
- ItemsSource="{Binding Path=PersonenViewSource}" >
- <DataGrid.Columns>
- <DataGridTextColumn Header="Vorname" Binding="{Binding Path=Vorname}" Width="0,5*"/>
- <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" Width="0,5*"/>
- </DataGrid.Columns>
- </DataGrid>
Das Datagrid bleibt komischerweise leer. Also habich einen Testbutton eingerichtet, in dem ich die View der PersonenViewSource auflisten lasse. Auch hier erfolgt die korrekte Listung der Namen.
Aber die Datagridview.Itemsource-Eigenschaft ist lt. Debugging Nothing!
Ich habe nun im Sub New des Usercontrol die Datagridview.Itemsource-Eigenschaft= PersonenViewSource.View gesetzt. Jetzt werden die Einträge angezeigt.
Aber warum ist das so?
- Was unterscheidet die Bindung des Datacontext über eine CollectionViewSource im XAML von einer Applicationsweit verfügbaren mit VB erstellten CollectionViewSource?
- Nach dem Laden über einen Button (Laden-Relaycommand) wird diese VB-CollectionViewSource nicht aktualisiert (wegen context.Dispose und context-Neuinstanzierung vermutlich) Im Mainmodel hab ich aber keinen Verweis auf das Control(Datagrid und Co) um die View neu zuzuweisen, und des möcht ich ja eigentlich auch nicht.
Hat da wer nen Tipp, wie ich das gebacken bekomm?
Achso, das warum das ganze hab ich fast vergessen: Ich möchte im applikationsweit verfügbaren Mainmodel-Objekt eine CollectionViewSouce zur Verfügung haben, die ich von jedem Fenster aus binden kann und deren .View.Filter-Eigenschaft ich nutzen kann.
Dank für eure Mühe
Vatter
Seit 26.Mai 2012 Oppa!