WPF MVVM навигации конфликтуют друг с другом - PullRequest
0 голосов
/ 16 февраля 2019

В моем проекте у меня есть класс MainViewModel, где у меня есть свойство DataContext, и я загружаю МЕНЮ в MainWindow из базы данных, используя DataContextMainWindow у меня есть ContentControl для загрузки UserControl.Когда я нажимаю пункт МЕНЮ, он должен вызвать функцию MainViewModel для загрузки UserControl в ContentControl.и вот я застрял в цикле.

MainWindow:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        DataContext = new MainViewModel();            
    }
}

XAML:

<ContentControl x:Name="contentCont1" />

MainViewModel:

public class MainViewModel: ViewModelBase
{
    UCSale ucSale = new UCSale();
    MainWindow mw = new MainWindow(); //IS IT ALLOED ?
    public MainWindow()
    {            
        Window1.contentCont1.Children.Add(ucSale );;
    }
    private void FillMenuItems()
    {
       //LOAD MENU ITEMS FROM DATABASE
    }            
}

1 Ответ

0 голосов
/ 18 февраля 2019

Используя подход MVVM, ваша ViewModel (ShareWindow) не должна знать о View (MainWindow).Кроме того, ваш конструктор для MainWindow:

public MainWindow()
{
    DataContext = new ShareWindow();            
}

, который инициализирует экземпляр ShareWindow.

Конструкция ShareWindow включает в себя:

UCSale ucSale = new UCSale();
MainWindow mw = new MainWindow(); //IS IT ALLOED ?
public MainWindow()
{            
    Window1.contentCont1.Children.Add(ucSale );;
}

, чтосоздание экземпляра MainWindow: MainWindow mw = new MainWindow(); //IS IT ALLOED ? и, таким образом, формируется цикл.

Этого можно избежать, просто удалив экземпляр MainWindow из модели представления ShareWindow, поскольку это нарушает шаблон MVVM.Любые связи с View от ViewModel должны использовать события для их развязки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...