在我的项目中,我有一个MainViewModel
类,该类具有DataContext
属性,并使用MainWindow
从数据库中的DataContext
中加载了MENU。在MainWindow
中,我有一个ContentControl来加载UserControl。当我单击“菜单项”时,它应调用MainViewModel
的函数以在ContentControl中加载UserControl。在这里我陷入了循环。
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
}
}
答案 0 :(得分: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的任何通讯都应使用事件,以使它们保持解耦状态。