Я новичок в WPF и все еще немного запутался, как работает привязка. По сути, у меня есть список, который не обновляется, если я заново инициализирую ViewModel
:
<Window.Resources>
<ViewModels:MyViewModel x:Key="myViewModel"/>
<!-- ... -->
<ListView x:Name="MyList" HorizontalContentAlignment="Stretch"
DataContext="{StaticResource myViewModel}"
ItemsSource="{Binding Customers}"
DockPanel.Dock="Top">
Когда Window
загружается в первый раз, вызывается ViewModel
и выбирает данные из базы данных. Хорошо, до здесь.
public class MyViewModel
{
public ObservableCollection<CustomerModel> Customers { get; set; }
public int HasWarnigs
{
get { return Customers.Where(a => a.HasWarning == true).Count(); }
}
public MyViewModel()
{
// fetch data.
Customers = ...
}
}
У меня есть метод в представлении, который снова инициализирует ViewModel
, чтобы перезагрузить новые данные из базы данных:
vm = new MyViewModel();
Однако новые данные не будут отображается автоматически в ListView
, если я не укажу DataContext
из ListView
в коде после повторной инициализации ViewModel
.
vm = new AnswersViewModel();
MyListView.DataContext = vm;
Я немного запутался, мне нужно явно установить DataContext
, как я и думал, указав ViewModel
в файле xaml, под ресурсами окна, будет вызывать привязку данных к модели представления при каждой инициализации?
Спасибо!