本文已参与「新人创作礼」活动,一起开启掘金创作之路。
在WPF中会经常使用到MVVM框架:
- Model、View和ViewMode之间的关系:View和ViewModel是如何联系起来(IOC)以及如何通信(通常采用Message),ViewModel和mode之间的弱关联(通常采用接口或简单注入)。
- 事件驱动模式在MVVM模式采用Command和Attached Behaviours的形式。
- 属性及ViewModel的NotifyPropertyChanged处理。
- 提供完整的单元测试,这也是保证框架的稳定性和维护性的保证。
问题描述
WPF 在XXView.xaml中设置了ContentControl,ContentControl绑定的界面竟然不显示???
按照正常逻辑编写了代码,运行的时候竟然出现了这个问题,不慌,我们一步一步来看
首先给大家看一下我之前是怎么给ContentControl绑定界面的。
代码复现
1、XXView.xaml
在XXView.xaml的ContentControl添加名称为XX-XX"的子界面
...... //这部分内容我就先省略了
<ContentControl x:Name="XX-XX"/>
2、XXViewModel.cs
在XXViewModel.cs中处理XX-XX
public class XXViewModel : Screen
{
//属性
public XX-XXViewModel XX-XX
{
get{return _xX-XX;}
set
{
_xX-XX = value;
NotifyOfPropertyChange(()=>XX-XX);
}
}
public XX-XXViewModel _xX-XX;
//在后续定义的方法中操作XX-XX
public void Func()
{
......
if(...)
{
XX-XX = new XX-XXViewModel();
}
else
{
XX-XX = null;
}
......
}
}
这样一波操作后,运行程序子界面竟然不显示。😓(lll¬ω¬)
解决方案
刚出现的问题很有可能是没有给ContentControl绑定上值,所以就再换一种方式重新绑定一下。
1、XXView.xaml
在XXView.xaml的ContentControl添加名称为XX-XX"的子界面
...... //这部分内容我就先省略了
<ContentControl x:Name="XX-XX" Content="{Binding XX-XX}"/>
2、XXViewModel.cs
在XXViewModel.cs中处理XX-XX
public class XXViewModel : Screen
{
//属性
public XX-XXView XX-XX
{
get{return _xX-XX;}
set
{
_xX-XX = value;
NotifyOfPropertyChange(()=>XX-XX);
}
}
public XX-XXView _xX-XX;
//在后续定义的方法中操作XX-XX
public void Func()
{
......
if(...)
{
XX-XX = new XX-XXView();
XX-XX.DataContext = new XX-XXViewModel(); //在这里还需要处理一下界面的上下文
}
else
{
XX-XX = null;
}
......
}
}
好了,界面就显示出来了,开心。