У меня есть сетка данных, привязанная к списку в модели представления. Содержимое сетки не обновляется, пока я не нажму на заголовок строки. Щелчки в разных ячейках на это не влияют. Я должен щелкнуть заголовок.
Это сетка данных в XAML:
<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, и в коллекции будет этот элемент. Однако сетка данных пуста. Если я щелкну строку заголовка, элемент отобразится в сетке.
У меня такая же проблема при редактировании.
Я уже успешно делал это раньше, поэтому я не уверен, что здесь изменилось. Я упускаю что-то очевидное? Почему сетка не отображает свое содержимое, пока я не нажму на строку заголовка?
Я только что заметил кое-что интересное. Когда я щелкаю заголовок сетки, точка останова в получателе TransactionDetailList не попадает, но данные все равно отображаются. Это похоже на то, что в сетке есть информация, она просто не отображается, пока не будет щелкнуть заголовок.
После перехода на использование ObservableCollection все заработало. Но теперь у меня та же проблема с редактированием (сетка не обновляется, пока не щелкнет заголовок):
private void EditTransactionDetail()
{
TransactionDetailViewModel viewModel = new TransactionDetailViewModel(this.SelectedTransactionDetail);
MainWindowViewModel.ViewLoader.ShowDialog(new TransactionDetailViewModel(this.SelectedTransactionDetail));
RaisePropertyChanged("TransactionDetailList");
}
Требуется ли моя сущность для реализации INotifyPropertyChanged? Если я изменю коллекцию и вызову RaisePropertyChanged, не должно ли это вызвать обновление сетки?