【问题标题】:C# WPF DataGrid only the first item is displayedC# WPF DataGrid 仅显示第一项
【发布时间】:2021-05-15 13:38:55
【问题描述】:

我是编程新手,已经学习了大约 3-4 个月,所以请考虑到我可能不理解/不知道很多概念,所以请尽可能以易于理解的方式向我解释!我对 WPF 中的 DataGrid 有一些问题。出于某种原因,我只能向其中添加一个新项目,之后当我尝试添加另一个新项目时,它不会显示在 DataGrid 中。我已将 DataGrid 的 ItemSoruce 设置为名为 gridClassValues 的列表。即使当我用新对象填充列表时,DataGrid 也不会显示这些新项目,除了第一个。代码如下:

public partial class MainWindow : Window
{
    List<WeightGridClass> gridClassValues = new List<WeightGridClass>();

    public MainWindow()
    {
        InitializeComponent();

    }

    private void AddWeightToGridButton_Click(object sender, RoutedEventArgs e)
    {

        gridClassValues.Add(new WeightGridClass { Weight = AddWeightToGrid.Text, Date = Convert.ToString(AddDateToGrid)});
        WeightDataGrid.ItemsSource = gridClassValues;

    }

    class WeightGridClass
{
    public string Weight { get; set; }
    public string Date { get; set; }
    public string SevenDayWeightAverage { get; set; }
}

XAML:

        <DataGrid x:Name="WeightDataGrid" Margin="440,194,10,10" AutoGenerateColumns="False"  Grid.RowSpan="2" Grid.ColumnSpan="2">
        <DataGrid.Columns>
            <DataGridTextColumn IsReadOnly="False" Header=" Date " Binding="{Binding Date, Mode=OneWay}" Width="100"/>
            <DataGridTextColumn Header=" Weight " Binding="{Binding Weight}" Width="80"/>
            <DataGridTextColumn Header=" 7-Day average " Binding="{Binding SevenDayWeightAverage}" Width="*"/>
        </DataGrid.Columns>
    </DataGrid>

提前致谢!

【问题讨论】:

  • 嗨!我想问题是您没有通知您的 gridClassValues 已更改。为此,您需要实现 INotifyPropertyChanged。我会推荐你​​在 wpf 中使用 mvvm 模式。 Check this step-by-step MVVM giude。它包括 INotifyPropertyChanged 使用等等。
  • 如果您没有什么经验,MVVM 可能不是最合适的解决方案。一个简单的解决方案是将其添加到您的 On_click ... 方法中:WeightDataGrid.Items.Refresh();

标签: c# wpf datagrid


【解决方案1】:

发生这种情况是因为当您向列表添加或删除项目时(初始化后),这不会通知您的 UI 以获取更改

所以你需要一些机制来告诉 UI 列表中的项目已更新

一个简单而好的解决方案是使用ObservableCollection 而不是List,这将自动在列表中添加或删除项目时通知 UI

ObservableCollection<WeightGridClass> gridClassValues = new ObservableCollection<WeightGridClass>()

阅读更多how to respond to changes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2011-09-14
    • 2018-12-05
    相关资源
    最近更新 更多