【问题标题】:Datagrid only returning empty rowsDatagrid 只返回空行
【发布时间】:2014-04-25 19:58:27
【问题描述】:

我的 C# 应用程序中有一个数据网格。加载应用程序时,我看到数据网格没有正确的行,因为没有加载数据。然后用户可以单击一个按钮来加载一些数据。此数据应反映在数据网格中,但事实并非如此。所发生的只是 12 个空行是可见的。 12 个空行等于我希望看到的记录数。

当我单步执行代码时,我可以看到我的基础对象 (PayOffWin) 确实包含所有字段中的数据和列表中的 12 项。出于某种原因,这些数据并没有反映在我的数据网格中,我看不出我做错了什么。

XAML

<DataGrid Name="dgPayoffWin" Grid.Row="1" Grid.Column="0"
                        Margin="20"
                        ItemsSource="{Binding Path=PayOffWin}"
                        Style="{StaticResource dgBase}"
                        CanUserAddRows="False"
                        CanUserDeleteRows="False"                          
                        AutoGenerateColumns="false">
                    <DataGrid.Columns>
                        <DataGridTextColumn Header="Range" Binding="{Binding Path=Group}" IsReadOnly="True"/>
                        <DataGridTextColumn Header="Frequency" Binding="{Binding Path=WinNum}" IsReadOnly="True"/>
                        <DataGridTextColumn Header="Total Value" Binding="{Binding Path=WinGain}" IsReadOnly="True" Width="*"/>
                    </DataGrid.Columns>
                </DataGrid>

我的视图模型中的代码隐藏

 List<ResultHolder.PayOffMatrix> _payOffWin;

 public List<ResultHolder.PayOffMatrix> PayOffWin
    {
        get { return _payOffWin; }
        set
        {
            _payOffWin = value;
            OnPropertyChanged("PayOffWin");
        }
    }


public class PayOffMatrix
        {
            public enumOutCome OutCome;
            public string Group;
            public double LimitUp, LimitDown;
            public double WinNum, WinGain, LossNum, LossGain;
            public double WinProb, WinExpect, LossProb, LossExpect;
        }

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    您可以绑定到公共属性,因此只需将 PayOffMatrix 中的字段更改为公共属性

    【讨论】:

      【解决方案2】:

      变化:

      List<ResultHolder.PayOffMatrix> PayOffWin;
      

      到:

      ObservableCollection<ResultHolder.PayOffMatrix> PayOffWin;
      

      它会起作用,列表不会自动通知视图。

      【讨论】:

      • 谢谢@Alvaro。如果实现 INotifyPropertyChanged 接口,我认为这个问题也应该消失。我的其他数据网格正在工作,并且底层对象实现了这个接口
      • 即使您将实现 INotifyPropertyChanged,也只会在首次加载应用程序时从列表中更新视图。因此,您必须始终使用 ObservableCollections,以确保在任何更新完成时都会完成通知。
      猜你喜欢
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 2018-06-19
      • 2017-07-29
      相关资源
      最近更新 更多