Есть как я думаю стандартный подход к получению данных из БД.
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> для вашего случая.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости