WPF обновление выпадающего списка при вставке записи в базу данных - PullRequest
0 голосов
/ 30 мая 2019

У меня есть небольшое приложение 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, подойдет ли это для этого сценария?Мне кажется это излишним.

...