将ObservableCollection绑定到WPF数据网格:网格保持空白

6

我想将一个ObservableCollection绑定到WPF数据表格上。 我的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,它不是空的。有人知道为什么我的数据表格保持为空吗?

2
你在哪里设置你的 DataContext?此外,我不认为你可以绑定到字段 - 我认为你必须绑定到属性,尽管我可能错了。 - Daniel Kelley
1
在您的窗口上实现INotifyPropertyChanged,并在glb_ObservableEvtCode = myEvt.GetAllEvtCode();这行代码之后调用它。 - Jordy van Eijk
1
@JordyVanEI 我认为在这种特殊情况下不需要,因为集合是在窗口的构造函数中创建的。 - Stephan Bauer
2个回答

16
你需要绑定到一个公共属性
public ObservableCollection<EvtCode> ObservableEvtCode
{
  get
  {
    return this.glb_ObservableEvtCode;
  }
}

还有 XAML:

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

编辑:请参见answer


1
如果我们在代码后台中定义了一个可观察集合(已经填充),并在数据网格中设置了ItemSource属性,那么WPF运行时应该能够使用MVVM模式绑定到它。我想知道为什么它不起作用的根本原因是什么。 - RBT

0

我的情况,如果有帮助的话:

类的数据成员也应该是公共属性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接