记录插入数据库时​​WPF更新组合框

时间:2019-05-30 14:30:55

标签: c# wpf prism viewmodel

我有一个用于数据输入的小型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,在这种情况下行得通吗?对我来说似乎太过分了。

0 个答案:

没有答案