在我的项目中,我有一个类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
}
}
使用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的任何通信应该使用事件来保持它们分离。