2013-02-26 35 views
6

Tôi muốn liên kết một ObservableCollection với dữ liệu wpf. ObservableCollection của tôi là không có sản phẩm nào, nhưng, DataGrid của tôi lại trống rỗng:Kết hợp một ObservableCollection với một DataGrid wpf: Grid vẫn trống

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

    public Fenetre_EvtCode() 
    { 
     InitializeComponent(); 

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

Đây là XAML của tôi:

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

Tôi lặp lại: Tôi nhìn vào gỡ lỗi, và ObservableCollection của tôi là không có sản phẩm nào.

Bất cứ ai cũng biết tại sao ma dữ liệu vẫn trống?

+1

Bạn đặt 'DataContext' ở đâu? Ngoài ra, tôi không tin rằng bạn có thể liên kết với các lĩnh vực - Tôi nghĩ rằng bạn phải liên kết với một tài sản, mặc dù tôi có thể sai. –

+0

Thực hiện INotifyPropertyChanged trên cửa sổ của bạn và gọi nó sau 'glb_ObservableEvtCode = myEvt.GetAllEvtCode();' dòng –

+0

@JordyVanEI Tôi nghĩ điều này là không cần thiết trong trường hợp đặc biệt này vì bộ sưu tập được tạo ra trong hàm tạo của cửa sổ –

Trả lời

16

Bạn cần phải liên kết với một tài sản công khai .

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

Và XAML:

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

Edit: cũng thấy answer

+1

lý do cơ bản do đó nó không hoạt động chỉ bằng cách thiết lập thuộc tính ItemsSource trên datagrid? nếu chúng ta đã định nghĩa một bộ sưu tập quan sát được (đã được điền) trong mã phía sau và thiết lập thuộc tính ItemSource trong datagrid thì thời gian chạy WPF sẽ có thể liên kết với nó bằng cách sử dụng mẫu MVVM. Tôi tự hỏi tại sao nó không. – RBT

0

trường hợp này của tôi, nếu điều này có thể giúp bất cứ ai:

Các thành viên dữ liệu của lớp cũng nên tài sản công cộng.