0

これはMVVM Lightの初心者エラーだと確信していますが、質問する必要があります. MVVM Light フレームワークと Ninject for DI を使用して WPF4 アプリケーションを作成しています。ViewModelLocator コンストラクターで、ViewModelBase.IsInDesignModeStatic 値を渡すので、DesignTime データまたは RunTime データを使用して DI を作成することがわかります。デザイナー (VS2010 または Blend ) で MainWindow.xml を開くと、プロパティが True になり、ブレークポイントが設定されている場合、コンストラクターが実行され、デバッグで中断されると思いました。アプリケーションは正常に実行され、正しく実行されるとデバッグされますが、プロパティが常に false であるため、デザインタイム データを取得できません。また、デザイナーで開いたときにコンストラクターが実行されているようには見えません。Laurent のビデオを何度も見たことがありますが、これが機能することはわかっています。誰かが私が間違っているに違いないと思うことを教えてください。

オーグブラット

4

1 に答える 1

0

遅くなりましたが、この種の問題をトラブルシューティングするときにこれを試してください。

テストするには単純なプロパティが必要です。ViewModel で "Foo" プロパティ (文字列) を作成し、それを XAML にバインドします (たとえば、TextBlock を使用します)。

ビューモデルで

  1. 「取得」で、ハードコードされた文字列を返します (例: 「ステップ 1」。これにより、「バインディング」が有効であることが検証されます。
  2. 「Get」ハードコードを削除し、コンストラクターで、最初の行に this.Foo = "Step 2" を配置します。これにより、コンストラクターが呼び出されていることが検証されます。
  3. 呼び出しが「コールバック」される 3 番目のセットを配置します。これにより、GetData が返されていることが確認されます。
  4. if (error != null) の「else」に、4 番目のセットを入れます。

例: これが私の MainViewModel コンストラクターです。

    public MainViewModel(IDataService dataService)
    {
        this.Foo = "Step 2";

        _dataService = dataService;
        _dataService.GetData(
            (item, error) =>
            {
                this.Foo = "Step 3";

                if (error != null)
                {
                    // Report error here
                    return;
                }
                else
                {
                    this.Foo = "Step 4";

                }


            });
    }

私の最後のバグは、GetData から返されるデータの割り当てを "if (error != null){...}" に入れてしまったことです。そのため、呼び出されることはありませんでした。

それ以来、コンストラクターを次のように書き直しました。

    public MainViewModel(IDataService dataService)
    {

        _dataService = dataService;
        _dataService.GetData(
            (item, error) =>
            {
                if (error == null)
                {
                    // Normal code here
                    return;
                }
                else
                {
                    // Report error here
                    return;
                }                    
            });
    }
于 2012-09-27T17:59:18.180 に答える