2013-02-26 22 views
6

Ich möchte ein ObservableCollection an Wpf DataGrid binden. Mein ObservableCollection nicht leer ist, aber, mein Datagrid leer bleiben:Eine ObservableCollection an ein WPF-Datagrid binden: Grid bleibt leer

public partial class Fenetre_EvtCode : Window 
{ 
    ObservableCollection<EvtCode> glb_ObservableEvtCode; 

    public Fenetre_EvtCode() 
    { 
     InitializeComponent(); 

     EvtCode myEvt = new EvtCode(); 
     glb_ObservableEvtCode = myEvt.GetAllEvtCode(); 
    } 
} 

Hier ist meine XAML:

<DataGrid Foreground="Aqua" 
      Name="myDataGridEvtCode" 
      AutoGenerateColumns="True" 
      HorizontalAlignment="Stretch" 
      Margin="0,0,0,0" 
      VerticalAlignment="Stretch" 
      Height="453" 
      ItemsSource="{Binding glb_ObservableEvtCode}" /> 

Ich wiederhole: Ich sah in debuggen und meine ObservableCollection ist nicht leer.

Wer weiß, warum Ma Datagrid leer bleiben?

+1

Wo setzen Sie Ihren 'DataContext'? Außerdem glaube ich nicht, dass Sie an Felder binden können - ich denke, Sie müssen an eine Eigenschaft binden, obwohl ich falsch liegen könnte. –

+0

Implementieren Sie INotifyPropertyChanged auf Ihrem Fenster und rufen Sie dies nach 'glb_ObservableEvtCode = myEvt.GetAllEvtCode();' diese Zeile –

+0

@JordyVanEI Ich denke, das ist in diesem speziellen Fall nicht erforderlich, da die Sammlung im Konstruktor des Fensters erstellt wird –

Antwort

16

Sie müssen an eine öffentliche Eigenschaft binden.

public ObservableCollection<EvtCode> ObservableEvtCode 
{ 
    get 
    { 
    return this.glb_ObservableEvtCode; 
    } 
} 

Und XAML:

<DataGrid 
    ... 
    DataContext="{Binding RelativeSource={RelativeSource AncestorType=Window}}" 
    ItemsSource="{Binding ObservableEvtCode}" > 
</DataGrid> 

Edit: auch diese answer

+1

Was ist das? zugrunde liegenden Grund, aufgrund der es nicht funktioniert, nur durch ItemsSource -Eigenschaft auf Datagrid festlegen? Wenn wir eine beobachtbare Sammlung (bereits gefüllt) im Code dahinter definiert haben und die ItemSource-Eigenschaft in Datagrid setzen, dann sollte die WPF-Laufzeit mit Hilfe des MVVM-Musters an sie binden können. Ich frage mich, warum es nicht so ist. – RBT

0

Mein Fall, wenn dies jemand helfen kann:

Die Datenelemente der Klasse auch sein sollte öffentliches Eigentum.

Verwandte Themen