Return 来自另一个 window 的列表值
Return List value from another window
我有两个 windows,windowA
有一个打开按钮 windowB
,windowB
有一个关闭按钮,还有 return列表值。我试过这段代码,但值保持为空。 windowB
有 RadGridView 控件,我想从中获取 selectedItem 并将其添加到列表中。
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();
}
}
结果是一个listClass,但里面没有值。为什么?我怎样才能让 selectedItem = ((listClass)AGridView.SelectedItem);
这条线适用于另一个 window?
给你举个例子:
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;
}
}
您应该在 Window1 中创建 listClass 变量,当您打开 Window2 时,您应该将此变量作为参数传递。这是我的演示:
第一个window:
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"
}
}
第二个window:
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
}
}
我的测试类(列表类):
public class TestClass
{
public string Test { get; set; }
}
我有两个 windows,windowA
有一个打开按钮 windowB
,windowB
有一个关闭按钮,还有 return列表值。我试过这段代码,但值保持为空。 windowB
有 RadGridView 控件,我想从中获取 selectedItem 并将其添加到列表中。
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();
}
}
结果是一个listClass,但里面没有值。为什么?我怎样才能让 selectedItem = ((listClass)AGridView.SelectedItem);
这条线适用于另一个 window?
给你举个例子:
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;
}
}
您应该在 Window1 中创建 listClass 变量,当您打开 Window2 时,您应该将此变量作为参数传递。这是我的演示:
第一个window:
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"
}
}
第二个window:
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
}
}
我的测试类(列表类):
public class TestClass
{
public string Test { get; set; }
}