0

問題は、設定である windowManager.showDialog() 関数の 3 番目のパラメータを使用すると、ViewModel の View が見つからないというエラー メッセージが表示されることです。

var view = Caliburn.Micro.ViewLocator.LocateForModel(MyViewModel, null, null);
dynamic settings = new System.Dynamic.ExpandoObject();
settings.ShowInTaskbar = false;
Caliburn.Micro.ViewModelBinder.Bind(MyViewModel, view, null);
this.windowManager.ShowDialog(MyViewModel, "", settings);

設定を提供しているように見えますが、ビューはなくなりました。しかし、最後の 2 つのパラメーターを削除すると、ファイルが機能します。SO や他のフォーラムを試してみましたが、答えが見つかりませんでした。

事前にご支援いただきありがとうございます。イルファン

4

1 に答える 1

2

簡単な答え:コンテキストパラメーターを指定せずにダイアログを表示してみてください。C# 4.0で導入されたオプションの引数nullを利用して、デフォルト値のままにしておきます。

this.windowManager.ShowDialog(MyViewModel, settings: settings);

長い答え: メソッドWindowManager.ShowDialog()は次のようになります。

/// <summary>
/// Shows a modal dialog for the specified model.
/// </summary>
/// <param name="rootModel">The root model.</param>
/// <param name="context">The context.</param>
/// <param name="settings">The optional dialog settings.</param>
public virtual void ShowDialog(object rootModel,
                               object context = null,
                               IDictionary<string, object> settings = null)
{
    var view = EnsureWindow(rootModel,
                           ViewLocator.LocateForModel(rootModel, null, context));

    ViewModelBinder.Bind(rootModel, view, context);

    var haveDisplayName = rootModel as IHaveDisplayName;

    if(haveDisplayName != null &&
       !ConventionManager.HasBinding(view, ChildWindow.TitleProperty))
    {
        var binding = new Binding("DisplayName") { Mode = BindingMode.TwoWay };
        view.SetBinding(ChildWindow.TitleProperty, binding);
    }

    ApplySettings(view, settings);

    new WindowConductor(rootModel, view);

    view.Show();
}

コンテキスト引数を呼び出しEnsureWindow()て渡すことに注意してください。この引数をstring.Empty (または"" ) として指定すると、Caliburn の実装でさらに別の方法で処理され、提供されたビューモデルに対応するビューを見つけるための値だけになります。null

この助けを願っています。

于 2013-07-23T22:57:03.870 に答える