2013-02-26 9 views
6

ObservableCollectionをwpfデータグリッドにバインドしたいと思います。 私ObservableCollectionは私のDataGridが空のまま、空ではありませんが、:wserfデータグリッドにObservableCollectionをバインドします。グリッドは空のままです

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

    public Fenetre_EvtCode() 
    { 
     InitializeComponent(); 

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

はここに私のXAMLです:

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

私は繰り返し:私は、デバッグに見て、私のObservableCollectionは空ではありません。

誰かが、なぜデータグリッドが空になっているのか知っていますか?

+1

あなたは 'DataContext'をどこで設定しますか?また、私はあなたがフィールドにバインドすることは信じていません - 私は間違っているかもしれませんが、あなたは財産に縛らなければならないと思います。 –

+0

あなたのウィンドウにINotifyPropertyChangedを実装し、 'glb_ObservableEvtCode = myEvt.GetAllEvtCode();'の行の後にこれを呼んでください。 –

+0

@JordyVanEIこの特別なケースでは、コレクションがウィンドウのコンストラクタで作成されているので、これは必要ではないと思います –

答えて

16

パブリックプロパティにバインドする必要があります。

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

とXAML:

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

編集:クラスの

データメンバーはまた、次のようになります。これは誰を助けることができる場合は、また、このanswer

+1

DataGridにItemsSourceプロパティを設定するだけでは機能しない根本的な理由はありますか?コードビハインドに観測可能なコレクション(すでに入力済み)を定義し、DataGridのItemSourceプロパティを設定している場合、WPF実行時間はMVVMパターンを使用してバインドできる必要があります。私はなぜそれがしないのだろうか。 – RBT

0

私のケースを見ます公共財産。

関連する問題