получить свойства диалогового окна связанной ViewModel - PullRequest
0 голосов
/ 16 июня 2020

для моего приложения, я создал всплывающее окно - <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;
        }
    }
}

... привязан к этому всплывающему окну (здесь скрытый код):

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

В этом окне у меня есть список, где SelectedItem привязан к свойству SelectedItem виртуальной машины.

Я называю это Всплывающее окно следующим образом:

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

Теперь мой вопрос ... Как я могу перенести это свойство publi c SelectedItem из модели просмотра всплывающих окон в MainWindow?

`SelectionPopup.SelectedItems` isn't available.

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Создайте DataContext окна:

GeneratorSelectionPopup SelectionPopup = new GeneratorSelectionPopup();
SelectionPopup.ShowDialog();
var selectedItem = (SelectionPopup.DataContext as GeneratorSelectionViewModel).SelectedItem;
0 голосов
/ 16 июня 2020

Вы можете использовать обработчик событий

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)
{
}
...