2015-12-11 2 views
0

У меня есть два окна, windowA, у которого есть кнопка для открытия windowB, а windowB имеет кнопку, чтобы закрыть себя, а также вернуть значение списка. Я пробовал этот код, но значение имеет значение null. windowB имеет элемент управления RadGridView, я хочу получить от него выбранный элемент и добавить его в список.Значение возвращаемого списка из другого окна

public class WindowA : Window 
{ 
    ... 

    private void button_Click(object sender, RoutedEventArgs e) 
    { 
     WindowB winB = new WindowB(); 
     if (winB.ShowDialog() == false) 
     { 
      listClass lc = winB.SelectedItemButton; 
      ... 
     } 
    } 
} 

public class WindowB : Window 
{ 
... 
    public listClass SelectedItemButton 
    { 
     get { return selectedItem; } 
     set 
     { 
      selectedItem = ((listClass)AGridView.SelectedItem); 
     } 
    } 

    private void button_Click(object sender, RoutedEventArgs e) 
    { 
     this.Close(); 
    } 
} 

Результаты - это списокКласс, но не имеет значения внутри. Зачем? и как я могу сделать selectedItem = ((listClass)AGridView.SelectedItem);, эта линия работает в другом окне?

+0

Вы должны явно установить winB-х ** DialogResult * * если близко. Кстати, selectedItem и SelectedItemButton в вышеуказанном коде ** рекурсивно ссылаются **, не нужно быть таким сложным. –

+0

@LeiYang, как работает DialogResult? Я новичок в C#. да, я сделал selectedItem в button_Click, чтобы убедиться, что он работает, но это не так. – Mirza

+0

"winB.listClass"? Я не вижу свойства или поля, названного так в классе WindowB. –

ответ

0

Пример для вас:

public partial class MainWindow : Window 
{ 
    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     Window1 dlg = new Window1(); 
     if(dlg.ShowDialog()??false) 
     { 
      MessageBox.Show(dlg.S); 
     } 
    } 
} 

    // Dialog 
public partial class Window1 : Window 
{ 
    public string S 
    { 
     get 
     { 
      return this.txt1.Text; 
     } 
    } 

    private void btnClose_Click(object sender, RoutedEventArgs e) 
    { 
     this.DialogResult = true; 
    } 
} 
+0

этот пример действительно работает для меня. спасибо – Mirza

0

вы должны создать переменную listClass в window1 и в то время как вы открываете window2 вы должны передать эту переменную в качестве параметра. Вот мое демо:

Первое окно:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     TestClass testClass = new TestClass(); 
     testClass.Test = "Initial"; 

     Second second = new Second(testClass); 
     second.ShowDialog(); 

     label.Content = testClass.Test; // It prints "Changed" 
    } 
} 

Второе окно:

public partial class Second : Window 
{ 
    TestClass testClass; 

    public Second(TestClass sent) 
    { 
     InitializeComponent(); 
     testClass = sent; 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     testClass.Test = "Changed"; // Change the value 
    } 
} 

Мои TestClass (listClass):

public class TestClass 
{ 
    public string Test { get; set; } 
} 
+0

извините за поздний ответ, btw его не работает – Mirza

Смежные вопросы