3

我正在尝试使用可移植类库来减少我自己的 MVVM 框架的每个平台的程序集。

所以我目前有这段代码(受@lbugnion MVVMLight 启发)

        public static bool IsInDesignModeStatic
    {
        get
        {
            if (!_isInDesignMode.HasValue)
            {
#如果银光
                        _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 等。我应该如何克服这个问题?

谢谢!

4

3 回答 3

4

你可以像我在 MVVM Light PCL fork 中那样做:

http://mvvmlight.codeplex.com/.../GalaSoft.MvvmLight (NET35)/ViewModelBase.cs

http://mvvmlight.codeplex.com/.../GalaSoft.MvvmLight/Helpers/DesignerPlatformLibrary.cs

使用反射加载和调用适当的调用。

于 2013-01-02T21:39:59.637 回答
0

我认为您不应该真正将这段代码直接包含在 PCL 中。pcl 的路线图看起来不错——但我怀疑 FrameworkElement 很快就会移植。

任何一个:

于 2013-01-03T11:08:12.300 回答
-1

您真的不应该在 PCL 中使用平台相关调用。PCL 的目的是共享代码,这对所有目标平台都是通用的。
如果您必须使用某些特定于平台的调用,则使用依赖注入和 IoC 隐藏实际实现并仅在 PCL 中使用接口类型,这应该可以正常工作。

于 2013-01-03T14:52:53.237 回答