我有一个用于数据输入的小型WPF应用程序。数据通过实体框架存储在SQL Server中。每个视图都与自己的ViewModel相关,并且使用MainWindow.xaml中构建的Mahapps汉堡菜单浏览不同的视图。当新记录添加到数据库时,我正在努力使组合框的内容更新。该记录将在一个视图中添加到数据库,并在另一个视图中的组合框中使用,但是该组合框仅包含初始值。我的想法是使用 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>
我的ViewModel的结构如下:
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,在这种情况下行得通吗?对我来说似乎太过分了。