Обновление коллекции источника данных Datagrid

240
15 июня 2017, 03:39

На форме есть 2 грида. DataContext для формы - отдельный класс(ViewModel). Первый грид сразу заполняется данными(в конструкторе класса). При щелчке на строку этого грида должен заполниться второй. Вот разметка второго :

<DataGrid MinHeight="140" VerticalAlignment="Top" Margin="0,220,0,0" ItemsSource="{Binding  TotalInvestCollectionByu, Mode=TwoWay}" AutoGenerateColumns="False" RowBackground="#FFD8C096"  >
            <DataGrid.Columns>
                <DataGridTextColumn Header="Title" Width="*" Binding="{Binding Title}">
                </DataGridTextColumn>
                <DataGridTextColumn Header="Isin" MinWidth="50" Binding="{Binding Isin}">
                </DataGridTextColumn>
                <DataGridTextColumn Header="Date" MinWidth="50" Binding="{Binding Date}">
                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>

источник данных TotalInvestCollectionByu является публичным свойством класса ViewModel:

public static ObservableCollection<TotalInvest> TotalInvestCollectionByu { get; set; }
public class TotalInvest
    {
        public string Title { get; set; }
        public string Isin { get; set; }
        public string Date { get; set; }
    }

И есть команда которая срабатывает при выборе строки первого грида. Коммадна по идеи должна вызывать заполнение TotalInvestCollectionByu данными :

    public ICommand SelectDetails
    {
        get
        {
            return new RelayCommand(() =>
            {
                TotalInvestCollectionByu = new ObservableCollection<TotalInvest>();
                TotalInvestCollectionByu.Add(new TotalInvest() { Title ="newTitle", Isin ="newisin", Date ="now"});
            }); }
    }

Однако происходит так, что в коллекцию TotalInvestCollectionByu новые значения хотя и добавляются, в самом гриде не отображаются. как это исправить ?

Answer 1

Проблема в том, что что вы заменяете коллекцию в TotalInvestCollectionByu на новый объект. ObservableCollection даёт нотификации об изменении внутри коллекции (то есть, списка элементов), но об подмене объекта этой самой коллекции сообщить, понятно, не может никак. Поэтому ваш DataGrid продолжает наблюдать за старым экземпляром коллекции, в котором уже, очевидно, ничего не меняется.

Ваш VM-класс должен имплементировать INotifyPropertyChanged, и отправлять NotifyPropertyChanged в сеттере TotalInvestCollectionByu. В качестве альтернативы, вы можете просто никогда не менять TotalInvestCollectionByu, а очищать её при помощи .Clear().

READ ALSO
OnPropertyChanged - Calculated property

OnPropertyChanged - Calculated property

Доброго времени сутокТакой вопрос:

247
Проблема с кодировкой C#

Проблема с кодировкой C#

Я работаю с VK APIПри запросах с браузера все работает стабильно, но при запросах из моей программы английские символы возвращаются правильно,...

281
Обработка исключений, скорость

Обработка исключений, скорость

У меня в конторе, где я работаю, есть множество кастомных библиотекВ том числе есть свой DAL для базы данных MSSQL

235
Определить если Control полностью отрисован в контейнере Windows Forms

Определить если Control полностью отрисован в контейнере Windows Forms

Каким способом можно определить если Control полностью отрисован в контейнеренужно в цикле проверить все дочерние контролы и определить какой...

233