У меня есть небольшое приложение WPF, которое используется для ввода данных.Данные хранятся в SQL Server через Entity Framework.Каждое представление связано с его собственной ViewModel, и различные представления перемещаются с помощью меню гамбургера Mahapps, созданного в MainWindow.xaml.Я пытаюсь обновить содержимое своих списков при добавлении новой записи в базу данных.Запись добавляется в базу данных в одном представлении и используется в комбинированном окне в другом представлении, но комбинированный список содержит только начальные значения.Я думал о том, чтобы использовать IActiveAware , чтобы определить, когда изменилось представление, и затем запросить базу данных, но мне не удалось заставить работать уведомление.
Вот фрагмент того, как строится меню:
<Controls:HamburgerMenu.ItemsSource>
<Controls:HamburgerMenuItemCollection>
<Controls:HamburgerMenuIconItem Icon="{iconPacks:FontAwesome GraduationCapSolid}"
Label="Schools">
<Controls:HamburgerMenuIconItem.Tag>
<views:SchoolView />
</Controls:HamburgerMenuIconItem.Tag>
</Controls:HamburgerMenuIconItem>
<Controls:HamburgerMenuIconItem Icon="{iconPacks:FontAwesome FilePdfSolid }"
Label="Reports">
<Controls:HamburgerMenuIconItem.Tag>
<views:ReportsView />
</Controls:HamburgerMenuIconItem.Tag>
</Controls:HamburgerMenuIconItem>
</Controls:HamburgerMenuItemCollection>
</Controls:HamburgerMenu.ItemsSource>
Мои ViewModels структурированы так:
using Prism;
...
public class SchoolViewModel : BaseViewModel, IActiveAware
{
...
public event EventHandler IsActiveChanged;
private bool _isActive;
public bool IsActive
{
get
{
return _isActive;
}
set
{
_isActive = value;
LoadData();
}
}
...
private void LoadData()
{
// requery database
}
}
, но когда я переключаю представления, IsActive никогда не бываетустановить и LoadData никогда не вызывается.Я не правильно использую IActiveAware?Я понял, что IsActive устанавливается при изменении активного представления (и, следовательно, активной модели представления).
Есть ли лучший способ выполнить обновление?
Я подумал о том, чтобы попробовать SignalIR, подойдет ли это для этого сценария?Мне кажется это излишним.