0

我想显示一个窗口以根据用户填写的表单创建对象。

我现在做的是从我的主视图模型中,我实例化我的表单窗口,将其数据上下文设置为相应视图模型类的新实例并获取 ShowDialog()

        var addLicWnd = new AddLicenseWindow();
        if (addLicWnd.ShowDialog() ?? false)
        {
            var x = ((AddLicenseWindowViewModel)addLicWnd.DataContext).dialogResult;
            //dialogResult is a property I set in my VM to get the data back when the form closes
        }

此 ViewModel 公开了一个 dialogResult 属性,以将数据从表单返回到我的主 ViewModel,然后我将其添加到 DB 等中......

我的问题是,例如,我无法通过按下按钮关闭其中的表单。

我发现的是一个类似问题的答案(https://stackoverflow.com/a/3329467/9734355)但我发现使用它的唯一方法是调用这个以窗口为参数的 SetDialogResult 方法。这意味着我需要在我的 ViewModel 中引用我的视图,从而破坏 MVVM(或者我错过了什么?)

所以它看起来像

主视图模型

        var addLicWnd = new AddLicenseWindow();
        addLicWnd.Datacontext = new AddLicenseWindowViewModel(addLicWnd);
        if (addLicWnd.ShowDialog() ?? false)
        {
            var x = ((AddLicenseWindowViewModel)addLicWnd.DataContext).dialogResult;
        }

表单视图模型

    public Window window;
    public event PropertyChangedEventHandler PropertyChanged;
    public LicenseRecordModel dialogResult;

    //Commands and OnPropertyChanged...

    public AddLicenseWindowViewModel(Window w)
    {
        window = w;
    }

    private void ButtonClick(){    
        dialogResult = new LicenseRecordModel("b", "b", "b", "b", "b");
        //...
        DialogCloser.SetDialogResult(wnd, true);
    }

可行,但对我来说看起来不符合 MVVM,我该怎么办?我误解了答案吗?

4

0 回答 0