2016-08-22 1 views
0

Je suis en train de concevoir un UserControl qui contient une grille de données. La grille de données n'affiche aucune ligne malgré tous mes efforts pour la lier au ItemsSource.Impossible de lier ItemsSource de DataGrid à l'intérieur du contrôle utilisateur WPF

Voici le flux de base de la liaison:

  1. Une fenêtre qui contient le UserControl.
  2. La fenêtre viewmodel contient une instance du viewmodel conçu pour le contrôle utilisateur.
  3. Je lie le ViewModel UserControl à ce viewmodel via la propriété de dépendance.
  4. La grille de données est ensuite liée à la collection observable dans le modèle de vue, mais rien ne s'affiche.

code (XAML et VB.Net):

Le modèle de vue de la fenêtre, binded à tous les contrôles de la fenêtre:

Public Class WindowVM 
    ... 
    Public Property UserControlViewModel as New UserControlVM 
End Class 

fenêtre Xaml:

<local:MyUserControl ViewModel="{Binding UserControlViewModel, Mode=OneWay}"/> 

Code de contrôle de l'utilisateur :

Public Shared ReadOnly ViewModelProperty As DependencyProperty = DependencyProperty.Register("ViewModel", GetType(UserControlVM), GetType(MyUserControl), New PropertyMetadata(Nothing)) 
... 
Public Property ViewModel As UserControlVM 
    Get 
     Return CType(Me.GetValue(ViewModelProperty), UserControlVM) 
    End Get 
    Set(value As UserControlVM) 
     Me.SetValue(ViewModelProperty, value) 
    End Set 
End Property 
.... 
Public Class UserControlVM 
    Public Property RunItems As New ObservableCollection(Of RunVM) 
End Class 

XAML de contrôle de l'utilisateur, DataGrid reliure:

<DataGrid DataContext="{Binding ViewModel}" 
    ItemsSource="{Binding RunItems}" ... 

Il semble que beaucoup d'étapes, mais à ma connaissance c'est la façon MVVM correcte serpent la liaison au DataGrid. Jusqu'à présent rien.

+0

Est-ce le code VB.NET? – ViVi

+0

oui vb.net éditera la question – Tekito

+0

Bien que vous l'ayez résolu vous-même. – ViVi

Répondre

0

On dirait que j'aurais pu le résoudre. Le DataContext devait être pointé sur le UserControl.

Juste un simple oubli:

<DataGrid DataContext="{Binding ViewModel, RelativeSource={RelativeSource AncestorType=UserControl}}" 
ItemsSource="{Binding RunItems}"