WPF MVVM导航相互冲突

问题描述 投票:-2回答:1

在我的项目中,我有一个类MainViewModel,我有DataContext属性,我使用MainWindow从数据库加载DataContext中的MENU。在MainWindow中,我有一个ContentControl来加载UserControl。当我单击MENU ITEMS时,它应该调用MainViewModel的函数来在ContentControl中加载UserControl。在这里,我陷入了困境。

主窗口:

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
    }            
}
c# wpf datacontext
1个回答
0
投票

使用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 ?,因此形成了一个循环。

您可以通过简单地从ShareWindow视图模型中删除MainWindow实例来避免这种情况,因为这违反了MVVM模式。从ViewModel到View的任何通信应该使用事件来保持它们分离。

© www.soinside.com 2019 - 2024. All rights reserved.