3

ポータブル クラス ライブラリを使用して、独自の MVVM フレームワークのプラットフォームごとのアセンブリを削減しようとしています。

だから私は現在このコードを持っています(@lbugnion MVVMLightに触発されました)

        public static bool IsInDesignModeStatic
    {
        get
        {
            if (!_isInDesignMode.HasValue)
            {
#if シルバーライト
                        _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;
                }
#endif
            }

            return _isInDesignMode.Value;
        }
    }

}

しかし、これを PCL 内で使用しようとすると、DesignerProperties や FrameworkElement などが認識されません。どうすればこれを克服できますか?

ありがとう!

4

3 に答える 3

4

MVVMLightPCLフォークで行うのと同じように行うことができます。

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 がすぐに移植可能になるとは思えません。

また:

  • この設計時コードを削除し、
  • または、プラットフォーム固有のインターフェイスを介して呼び出されるように、このコードを抽象化します。msdn のプラットフォーム抽象化手法を参照してください - http://msdn.microsoft.com/en-us/library/gg597391.aspx#abstraction
  • または@Orenの答えからの反射テクニックを使用してください
于 2013-01-03T11:08:12.300 に答える
-1

PCLではプラットフォームに依存する呼び出しを実際に使用しないでください。PCLの目的は、すべてのターゲットプラットフォームに共通のコードを共有することです。
プラットフォーム固有の呼び出しを使用する必要がある場合は、依存性注入とIoCを使用して実際の実装を非表示にし、PCLでインターフェイスタイプのみを使用します。これは問題なく機能するはずです。

于 2013-01-03T14:52:53.237 に答える