2016-08-01 20 views
0

Ich möchte ein DataGrid mit Werten einer ObservableCollection füllen, die eine Eigenschaft einer Viewmodel-Klasse ist.Zugriff auf lokale Ressource zum Laden von Werten in beobachtbare Auflistung in Codebehind

Leider ergibt das Folgende keine Ergebnisse.

Seite XAML:

<Page.Resources> 
    <vm:vmProjects x:Key="Projects"/> 
</Page.Resources> 
<Grid> 
    <DataGrid x:Name="dgProjects" AutoGenerateColumns="True" 
    DataContext="{Binding Source=Projects}" ItemsSource="{Binding ProjectList}">  
    </DataGrid> 
    </Grid> 
</Page> 

Seite Code:

vmProjects Projects; 

public pgProjects() 
{ 
    InitializeComponent(); 

    projects= (vmProjects)this.Resources["Projects"]; 
    LoadList(Projects.ProjectList); // this is a database layer, which fills the collection with value (works, there are items in the collection) 

} 
+1

funktionierts? 'DataContext =" {StaticResource-Projekte} "'. Entweder das, oder Sie legen eine neue Instanz von Projects im Konstruktor 'pgProjects' auf den DataContext fest und entfernen sowohl die Ressourceninstanz von' Projects' als auch das DataContext-Attribut im DataGrid. –

+0

Es tut! Danke, das war sehr schnell! –

Antwort

1

Es gibt zwei Möglichkeiten, dies zu tun:

Erstens, da Sie eine Instanz des Viewmodels als sind die Schaffung Ressource, Ihre DataContext-Bindung ist falsch. Das ist sehr einfach und schnell zu beheben:

DataContext="{StaticResource Projects}" 

Aber da Ihr Viewmodel ein Ansichtsmodell für die gesamte Seite zu sein scheint, dies würde Ihr Leben auf lange Sicht vereinfachen:

<Page.DataContext> 
    <vm:vmProjects /> 
</Page.DataContext> 

<Grid> 
    <DataGrid 
     x:Name="dgProjects" 
     AutoGenerateColumns="True" 
     ItemsSource="{Binding ProjectList}">  
    </DataGrid> 
</Grid> 

Jetzt, wo gleiche Instanz von vmProjects ist der Datenkontext für die gesamte Seite, und Sie müssen es nicht für das DataGrid oder ein anderes unterordnetes Steuerelement angeben.

, um es in den Code zu bekommen hinter ist einfacher, auch:

public pgProjects() 
{ 
    InitializeComponent(); 

    LoadList(ViewModel.ProjectList); 
} 

public vmProjects ViewModel => (vmProjects)DataContext; 
+1

Teil 2 funktioniert noch besser! –