Есть как я думаю стандартный подход к получению данных из БД.
public static class Core
{
public static IList<string> GetItems() =>
(new BusinessContext()).GetAll<...>().Where(...).ToList();
...
}
Во ViewModel имеем следующее:
private IList<string> _items;
public ICollectionView ItemsCollection {get; set;}
public void CONSTRUCTOR()
{
_items = new List<string>();
_items = Core.GetItems();
ItemsCollection = CollectionViewSource.GetDefaultView(_items);
ItemsCollection.Refresh();
}
Привязываем, и получаем список из БД в нашей View.
Однако, если сделать вот-так:
private string _foo;
public string Foo
{
get { return _foo;}
set { _foo = value;
NotifyProppertyChange();
if (_foo != null)
{
_items.Clear();
_items = Core.GetItems();
ItemsCollection.Refresh();
}
}
}
Ничего во вью, не отображается, пока не заменим _items = Core.GetItems();
на
foreach( string item in Core.GetItems()) _items.Add(item);
Вопрос: почему в конструкторе срабатывает, а тут нет?
Ошибка в том, что вы в VM используете типы наподобие CollectionView
. Это чисто вьюшные типы, которые вам не должны быть интересны.
Для того, чтобы обновление коллекции подхватывалось, вы должны использовать в VM коллекцию, реализующую INotifyCollectionChanged
(не путайте с INotifyPropertyChanged
). Например, ObservableCollection<string>
для вашего случая.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Подскажите пожалуйста есть форма в Excele (для записи заявок на сервис), очень много чего завязано на telegramЗаинтересовал вот подобный вариант...
Добрый деньВозник такой вопрос - возможно ли Post ,Get запросами cэмулировать просмотр ролика без браузера?Если это возможно хотя бы намекните...
Не думал что задам такой вопрос, но я действительно не могу найти решение отформатировать текущую дату в ISO 8601, отставив тип данных DateTime