Вернуть результат после закрытия окна - PullRequest
2 голосов
/ 20 июля 2011

Я пытаюсь получить значение после закрытия диалогового окна:

public partial class MyDialogWindow: Window
{
    public string selectedItem = "";
    public MyDialogWindow(string selectedItem)
    {
        InitializeComponent();
        this.selectedItem = selectedItem;
    }

    ...
}


// To call dialog
string result = "";
MyDialogWindow dialog = new MyDialogWindow(result);
if (form.ShowDialog().Value)
{
   string res = result;
}

Но «результат» всегда пуст.В winforms я могу получить этот результат, но в WPF нет.Так как же вернуть результат из окна, после того, как оно закрыто?

Ответы [ 3 ]

6 голосов
/ 20 июля 2011

Строки не работают так в C # - они неизменны.

Вы можете заставить это работать, используя ключевое слово ref, как предлагали другие, однако это будет работать, только если вы установите SelectedItem в конструкторе, что немного маловероятно!

Обычный способ сделать это состоит в том, чтобы ваш диалог выставлял свойство в вашем диалоге:

public partial class MyDialogWindow: Window
{
    public string SelectedItem
    {
        get;
        set;
    {

    // etc...
}

MyDialogWindow dialog = new MyDialogWindow(result);
if (form.ShowDialog().Value)
{
   string res = dialog.SelectedItem;
}

Это способ, которымдругие диалоги (например, диалоги открытия / сохранения файла) работают.

1 голос
/ 22 марта 2017

Вот пример окна, которое я просто пишу:

public partial class ActionDialog : Window
{

    public ActionDialog(string msg)
    {
        InitializeComponent();
        MsgTbx.Text = msg;
    }

    //Record the user's click result
    public bool ClickResult = false;

    //In Other place need to use this Dialog just Call this Method
    public static bool EnsureExecute(string msg)
    {
        ActionDialog dialogAc = new ActionDialog(msg);
        //this line will run through only when dialogAc is closed
        dialogAc.ShowDialog(); 
        //the magic is the property ClickResult of dialogAc
        //can be accessed even when it's closed
        return dialogAc.ClickResult;
    }

    //add this method to your custom OK Button's click event        
    private void Execute_OnClick(object sender, RoutedEventArgs e)
    {
        ClickResult = true;
        this.Close();
    }

    //add this method to your custom Cancel Button click event       
    private void Cancel_OnClick(object sender, RoutedEventArgs e)
    {
        ClickResult = false;
        this.Close();
    }
}

И код при вызове диалога:

//simply one line can get the user's Button Click Result
bool isExecute = ActionDialog.EnsureExecute(msg);

Ссылка на

https://social.msdn.microsoft.com/Forums/vstudio/en-US/a5cae559-ff8c-4cd8-9c76-4e5821c9aefb/wpf-window-return-value?forum=wpf

1 голос
/ 20 июля 2011

Добавьте общедоступное свойство в класс MyDialogWindow, а затем просто получите к нему доступ после того, как ShowDialog () был возвращен.

   class MyDialogWindow
   {
       public string UserEnteredData { get; set; }
   }


   if (form.ShowDialog().Value) 
   {    
      string res = dialog.UserEnteredData; 
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...