Jas*_*son 5 wpf xaml visual-studio
我正在开发一个项目,该项目具有多个从抽象基类(本身基于 UserControl)继承的 WPF 用户控件。这些控件在运行时呈现得很好,但它们不会在设计器中呈现。
我认为这是因为设计者试图创建 xaml 根元素的实例,在本例中是我的基类,但它无法创建实例,因为它是抽象的。
作为记录,我知道在 WPF 中使用这种类型的控件层次结构存在“模式和实践”类型的问题,但目前无法重构整个项目。
我的问题是:我知道有用于设置 DataContext、DesignWidth 等的设计时属性。我想知道的是,您能否提供一个“设计时”实例或类型作为控件的替代品提供在设计器中加载?
在设计时,Visual Studio 将尝试使用无参数构造函数创建新的 YourUserControl 实例。
如果你不能像这样创建用户控件即时
var myView = new MyUserControl(); //no params
Run Code Online (Sandbox Code Playgroud)
设计师将无法渲染。
如果 YourUserControl 需要任何参数。最流行的技巧是创建像这样的专用构造函数
public MyUserControl() :
this(new MockViewModel(), new MockDataContext){ } // mock Designtime constructor
puclic MyUserControl(IViewModel vm, IDataContext context) //runtime constructor
{
}
Run Code Online (Sandbox Code Playgroud)
在 MVVM 模式中,某些 UserControl.DataContext 是用户定义的类型,需要一些参数 XAML
<UserControl.DataContext>
<local:MyViewModel />
</UserControl.DataContext>
Run Code Online (Sandbox Code Playgroud)
您必须为设计时环境定义无参数构造函数。
public MyViewModel() : this(new MockEventAggregator()) //for designtime
{ }
[ImportingConstructor]
public MyViewModel(IEventAggregator eventAggregator) //for runtime
{
this._eventAggregator = eventAggregator;
//...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1034 次 |
| 最近记录: |