【发布时间】: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();