获取绑定 ViewModel 的对话框属性

get Dialog Properties of bound ViewModel

对于我的应用程序,我创建了一个弹出窗口 - <Window> 绑定到 ViewModel。

弹出窗口的视图模型:

public class GeneratorSelectionViewModel : BaseViewModel
{
    private Window mWindow;

    public ICommand SelectedCommand { get; set; }
    public GeneratorListItem SelectedItem { get; set; }

    public GeneratorSelectionViewModel(Window window)
    {
        mWindow = window;
        SelectedCommand = new RelayCommand(GeneratorSelected);
    }
    private void GeneratorSelected(object parameter)
    {
        if (SelectedItem != null)
        {
            mWindow.DialogResult = true;
        }
    }
}

...绑定到此弹出窗口window(此处为代码隐藏):

public partial class GeneratorSelectionPopup : Window
{
    public GeneratorSelectionPopup()
    {
        InitializeComponent();
        this.DataContext = new GeneratorSelectionViewModel(this);
    }
}

在那个 window 中,我有一个列表框,其中 SelectedItem 绑定到 VM 的 SelectedItem-属性。

我按以下方式调用此 Popup:

        GeneratorSelectionPopup SelectionPopup = new GeneratorSelectionPopup();
        SelectionPopup.ShowDialog();

现在我的问题... 如何将 public 属性 SelectedItem 从弹出窗口视图模型传输到主窗口?

`SelectionPopup.SelectedItems` isn't available.

您可以使用事件处理程序

public partial class GeneratorSelectionPopup : Window
{
    public event EventHandler<MyEventArgs> ButtonOkClicked;

    public GeneratorSelectionViewModel ViewModel;

    public GeneratorSelectionPopup()
    {
        InitializeComponent();
        ViewModel = new GeneratorSelectionViewModel(this);
        this.DataContext = ViewModel
    }

   private void HandleOkButtonClick(object sender, RoutedEventArgs e)
    {
        ButtonOkClicked?.Invoke(this, new MyEventArgs
        {
            SelectedItem = this.ViewModel.SelectedItem
        });

        Window.GetWindow(this).Close();
    }
} 


public class MyEventArgs: EventArgs
{
    public GeneratorListItem SelectedItem { get; set; }
}

并且在主窗口cs:

   GeneratorSelectionPopup SelectionPopup = new GeneratorSelectionPopup();
    SelectionPopup.ButtonOkClicked += OnButtonOkClicked;
    SelectionPopup.ShowDialog();

private void OnButtonOkClicked(object sender, MyEventArgs e)
{
}

DataContext的window:

GeneratorSelectionPopup SelectionPopup = new GeneratorSelectionPopup();
SelectionPopup.ShowDialog();
var selectedItem = (SelectionPopup.DataContext as GeneratorSelectionViewModel).SelectedItem;