3

編集:

新しい情報、ロガーを動作させることができました (正直なところ、cm にロガーがあるとは思いもしませんでした!) を使用しようとすると、このメッセージが表示されますTryClose()

TryClose requires a parent IConductor or a view with a Close method or IsOpen property

私はこれに何日も立ち往生しており、研究はゼロになりました.この問題について以前に質問を投稿しようとしましたが、回答が得られなかったので、私はそれを正しく表現しなかったと思います.

次のコードを含むビューとビューモデル ContentView/Modelがあります。

コンテンツビュー:

<MenuItem Header="New Project" x:Name="OpenProject" cal:Message.Attach="[Event Click] = [Action NewProject()]"/>

ContentViewModel :

public void NewProject()
    {
        NewProjectViewModel viewModel = new NewProjectViewModel(_projectManager);
        _windowManager.ShowWindow(viewModel);
        //If the result is true, we have a new project, otherwise they cancelled the window.
        if (viewModel.Result)
        {
            Project newP = new Project(0, viewModel.ProjectNo, viewModel.ProjectName, 0, 0);
            _projectManager.Insert(newP);
        }
    }

ビューモデルNewProjectViewModelには次のものがあります。

 public void Create()
    {
        this.Result = true;
        TryClose(true);
    }

以前はダイアログの [ OK ] ボタンでmessage.attach を使用していたのと同じように呼び出されます。

ただし、問題はTryClose()常にダイアログを閉じることができないことです。caliburn.micro のソースがないため、内部でデバッグすることはできませんが、常に null を返すため、TryClose()実行(GetView() As Window).Close()も失敗します。GetView()

このダイアログを閉じる方法がまったくわからないので、助けや提案をいただければ幸いです。

編集: 以前の質問と同様に、これに関する回答が得られていないように見えるため、情報が不足していると想定します。この問題を理解するために、ビューファーストのアプローチを使用することに何か関係があると思います。

NewProjectViewには次のものがあります。

             xmlns:cal="http://www.caliburnproject.org"
         cal:Bind.Model="ShippingClient.ViewModels.NewProjectViewModel"

これは、通常使用される自動方法ではなく、ビューモデルをバインドするために使用されます。おそらくこれがGetView()null を返す理由ですか?

4

1 に答える 1