我有一个DataGrid控件,它绑定了视图模型中的一个List。该控件的内容在我点击行标题之前不会更新。点击各种单元格对其没有影响,我必须点击标题。
以下是XAML中的DataGrid控件:
<DataGrid x:Name="TransactionDetailsGrid" Grid.Row="1" AutoGenerateColumns="False" SelectionMode="Extended" IsReadOnly="True" HeadersVisibility="Column"
ItemsSource="{Binding TransactionDetailList}" SelectedItem="{Binding SelectedTransactionDetail}" GridLinesVisibility="None">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=Account.AccountNumber}" Header="Account No." HeaderStyle="{StaticResource DataGridHeaderStyleCenter}" Width="120" />
<DataGridTextColumn Binding="{Binding Path=Account.AccountName}" Header="Account Name" HeaderStyle="{StaticResource DataGridHeaderStyleCenter}" Width="*" />
<DataGridTextColumn Binding="{Binding Path=Amount}" Header="Amount" HeaderStyle="{StaticResource DataGridHeaderStyleCenter}" Width="120" />
</DataGrid.Columns>
</DataGrid>
这是来自视图模型的内容:
public List<TransactionDetail> TransactionDetailList
{
get { return this._transactionDetailList; }
set
{
this._transactionDetailList = value;
RaisePropertyChanged("TransactionDetailList");
}
}
这是视图模型中其中一项的编辑:
private void AddTransactionDetail()
{
TransactionDetailViewModel viewModel = new TransactionDetailViewModel();
MainWindowViewModel.ViewLoader.ShowDialog(viewModel);
if (viewModel.TransactionDetail != null)
{
this.TransactionDetailList.Add(viewModel.TransactionDetail);
RaisePropertyChanged("TransactionDetailList");
}
}
在此运行后,我可以在TransactionDetailList的Getter上设置断点,并且集合中有该项。然而,数据表是空的。如果我点击标题行,项目将会显示在网格中。当进行编辑时,我遇到了相同的问题。
我以前成功地做过这件事,所以我不确定这里有什么不同。我是否漏掉了一些明显的东西?为什么网格直到我点击标题栏才会显示其内容?
我刚刚注意到了一些有趣的事情。当我点击网格标题时,TransactionDetailList Getter中的断点没有被触发,但数据仍然显示出来。因此,就好像网格已经有了信息,只是在点击标题之前没有显示出来。
改用ObservableCollection后,它可以工作了。但现在我在编辑时也遇到了同样的问题(网格直到单击标题后才更新)。
private void EditTransactionDetail()
{
TransactionDetailViewModel viewModel = new TransactionDetailViewModel(this.SelectedTransactionDetail);
MainWindowViewModel.ViewLoader.ShowDialog(new TransactionDetailViewModel(this.SelectedTransactionDetail));
RaisePropertyChanged("TransactionDetailList");
}
我的实体类需要实现 INotifyPropertyChanged 接口吗?如果我更改了集合并调用了 RaisePropertyChanged 方法,那不应该会导致网格更新吗?