【问题标题】:Bind an ObservableCollection to a wpf datagrid : Grid stays empty将 ObservableCollection 绑定到 wpf 数据网格:网格保持为空
【发布时间】:2023-03-07 00:01:01
【问题描述】:

我想将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 不为空。

有人知道为什么 ma datagrid 保持空白吗?

【问题讨论】:

  • 你在哪里设置你的DataContext?另外,我不相信您可以绑定到字段 - 我认为您必须绑定到属性,尽管我可能是错的。
  • 在你的 Window 上实现 INotifyPropertyChanged 并在 glb_ObservableEvtCode = myEvt.GetAllEvtCode(); 那行之后调用它
  • @JordyVanEI 我认为在这种特殊情况下不需要这样做,因为集合是在窗口的构造函数中创建的

标签: c# wpf data-binding datagrid observablecollection


【解决方案1】:

您需要绑定到一个公共属性

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

还有 XAML:

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

编辑:另见answer

【讨论】:

  • 仅通过在数据网格上设置 ItemsSource 属性无法正常工作的根本原因是什么?如果我们在后面的代码中定义了一个可观察的集合(已经填充)并在 datagrid 中设置了 ItemSource 属性,那么 WPF 运行时应该能够使用 MVVM 模式绑定到它。我想知道为什么它没有。
【解决方案2】:

我的情况,如果这可以帮助任何人:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-28
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 2013-10-07
    • 2011-01-31
    • 2017-05-14
    • 2011-05-28
    相关资源
    最近更新 更多