我正在尝试使用可移植类库来减少我自己的MVVM框架的每个平台的程序集。
所以我目前拥有此代码(受@ lbugnion MVVMLight启发)
public static bool IsInDesignModeStatic
{
get
{
if (!_isInDesignMode.HasValue)
{
#if SILVERLIGHT
_isInDesignMode = DesignerProperties.IsInDesignTool;
#其他
var prop = DesignerProperties.IsInDesignModeProperty;
_isInDesignMode
= (bool)DependencyPropertyDescriptor
.FromProperty(prop, typeof(FrameworkElement))
.Metadata.DefaultValue;
// Just to be sure
if (!_isInDesignMode.Value
&& Process.GetCurrentProcess().ProcessName.StartsWith("devenv", StringComparison.Ordinal))
{
_isInDesignMode = true;
}
#万一
}
return _isInDesignMode.Value;
}
}
}
但是当我尝试在PCL中使用它时,它无法识别DesignerProperties和FrameworkElement等。 我该怎样克服这个?
谢谢!
答案 0 :(得分:4)
你可以像我在MVVM Light PCL fork中那样做:
http://mvvmlight.codeplex.com/.../GalaSoft.MvvmLight (NET35)/ViewModelBase.cs
http://mvvmlight.codeplex.com/.../GalaSoft.MvvmLight/Helpers/DesignerPlatformLibrary.cs
使用Reflection加载并调用适当的调用。
答案 1 :(得分:0)
我认为您不应该将此代码直接包含在PCL中。 pcl的路线图看起来不错 - 但我怀疑FrameworkElement很快就可以移植。
或者:
答案 2 :(得分:-1)
你真的不应该在PCL中使用平台相关的调用。 PCL的目的是共享代码,这对所有目标平台都是通用的 如果你必须使用一些特定于平台的调用,那么使用依赖注入和IoC隐藏实际的实现并仅使用PCL中的接口类型,这应该可以正常工作。