如果设置为数据上下文的视图模型在静态类中注册,则XAML设计器会使visual studio 2010崩溃。
查看
<Window x:Class="CTL.Editor.View.EditorWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:editor="clr-namespace:CTL.Editor.ViewModel.Editor"
Height="300" Width="300">
<Window.DataContext>
<editor:EditorWindowViewModel />
</Window.DataContext>
<Grid>
</Grid>
</Window>
视图模型:
public EditorWindowViewModel()
{
ApplicationViewModel.EditorWindows.Add(this);
}
~EditorWindowViewModel()
{
ApplicationViewModel.EditorWindows.Remove(this);
}
这有什么办法吗?也许是#指令?
答案 0 :(得分:2)
您可以在设计模式下使用DesignerProperties.IsInDesignMode来执行压力。只需将代码包装在if语句中:if(!DesignerProperties.IsInDesignTool)
但是,通过调试设计器异常来找到问题的根本原因通常是个好主意。 Here是一篇很好的文章,可以帮助你入门。
答案 1 :(得分:1)
对于那些寻求比Postlagerkarte的答案更详细的人:
使用对MVVM友好的IsInDesignMode的方法如下所示。
if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
{
....
}
我的问题是由于ApplicationViewModel的构造函数加载配置文件,显然Visual Studio不喜欢它,没有找到文件或者在运行时没有在正确的位置搜索文件我的代码。
我最终做的是:
public static bool DesignMode
{
get { return DesignerProperties.GetIsInDesignMode(new DependencyObject()); }
}
static ApplicationViewModel()
{
if (!DesignMode)
{
Configuration = Configuration.LoadConfigurationDocument();
}
}
注意:ApplicationViewModel上有一个Configuration静态成员和一个加载配置的Configuration类。