Связывание данных WPF не обновляется, пока не щелкнет заголовок строки

У меня есть сетка данных, привязанная к списку в модели представления. Содержимое сетки не обновляется, пока я не нажму на заголовок строки. Щелчки в разных ячейках на это не влияют. Я должен щелкнуть заголовок.

Это сетка данных в 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, не должно ли это вызвать обновление сетки?

13
задан Bob Horn 24 June 2011 в 01:16
поделиться