在我的MainWindow.xaml中,我有:
<Frame Grid.Row="1" Content="{Binding MainWindowModelData.ContentView}"/>
在我的MainWindowModelData中,我有一个名为ContentView的属性:
private Page _ContentView;
public Page ContentView
{
get
{
if (_ContentView == null)
{
LicenceManagerModel pModel = new LicenceManagerModel();
LicenceManagerViewModel pViewModel = new LicenceManagerViewModel(pModel);
LicenceManagerView pView = new LicenceManagerView();
pView.DataContext = pViewModel;
_ContentView = pView;
}
return _ContentView;
//return _ContentView ?? (_ContentView = new Page());
}
set
{
Set(ref _ContentView, value);
}
}
到目前为止,LicenceManagerView正在构建文本。 设置(ref _ContentView,value);将提升物业交易活动
当程序启动时,ContentView被设置并且“正在构建”(它显然有一个对LicenceManagerView的引用。
在MainWindowModel中,我有一些代码来更改此ContentView属性:
MenuModel pModel = new MenuModel();
MenuViewModel pViewModel = new MenuViewModel(pModel);
MenuView pView = new MenuView();
pView.DataContext = pViewModel;
ContentView = pView;
引发并更改ContentView属性。
问题:ContentView现在指向MenuView,但主窗口继续显示LicenceManagerView中的“Under Construction”。
发生了什么事?
答案 0 :(得分:0)
我通过实施以下方法解决了这个问题: 1:MainWindow将加载一个MenuView 2:MenuView顶部有按钮,下面有主要内容。 3. MenuView模型有一个属性ContentView(带有propertyChange事件) 4.单击其他菜单按钮时,ContentView将设置为不同的view-viewmodel-model
注意:所有代码都是代码,而不是整个代码。
<强>主窗口:强>
<DockPanel>
<Frame x:Name="MainWindowFrame" NavigationUIVisibility="Hidden"/>
</DockPanel>
MainWindow背后的代码:
private void PageLoaded(object sender, RoutedEventArgs e)
{
MenuModel pModel = new MenuModel();
MenuViewModel pViewModel = new MenuViewModel(pModel);
MenuView pView = new MenuView();
pView.DataContext = pViewModel;
MainWindowFrame.Content = pView;
}
MenuView具有:
<Frame Content="{Binding MenuModelData.ContentView}"/>
MenuModel具有:
private Page _ContentView;
public Page ContentView
{
get
{
if (_ContentView == null) { _ContentView = ViewLicenceManager; }
return _ContentView;
}
set
{
Set(ref _ContentView, value);
}
}
<强> MenuViewModel 强>
internal sealed class MenuViewModel
{
public MenuViewModel()
{
}
public MenuViewModel(MenuModel wModel)
{
if (wModel == null) { return; }
MenuModelData = wModel;
}
private MenuModel _MenuModelData;
public MenuModel MenuModelData
{
get
{
if (_MenuModelData == null) { _MenuModelData = new MenuModel(); }
return _MenuModelData;
}
set
{
MenuModelData = value;
}
}
}