问题描述
上下文:我正在制作WPF应用程序。在这种情况下,我有一个带有用户控件的窗口,另一个带有在用户控件中引入信息的窗口。我有三个窗口:主窗口(在其中创建按钮),数据输入窗口(此数据以后将通过showDialog()==true
进入主窗口以创建按钮)和详细视图中的查看按钮数据。
问题:当我想将变量从另一个窗口获取到查看按钮信息窗口时遇到问题。名为Window4的窗口不会接收变量,因此将其等于null。
代码:
//Click event of the new buttons created with data entering window's info.
void newBtn_Click(object sender,EventArgs e)
{
Window4 win4 = new Window4();
win4.Show();
}
...
var vent = new Ventanal2(); //Ventanal2 is data entering window
if (vent.ShowDialog() == true)
{
ImageBrush nuestroIcono = vent.retornoIcono();
string tituloHabilidad = vent.retornoTitulo();
string grupoHabilidad = vent.retornoGrupo();
int nivelHabilidad = vent.retornoNivel();
//The method below creates the new button. The above get the button Data from the Data Entering Window
crearBoton(tituloHabilidad,grupoHabilidad,nivelHabilidad,nuestroIcono);
}
//Data viewing window
public Window4()
{
InitializeComponent();
var vent = new Ventanal2();
ImageBrush nuestroIcono = vent.retornoIcono();
string tituloHabilidad = vent.retornoTitulo();
int nivelHabilidad = vent.retornoNivel();
}
如果我将showDialog()放置在“数据查看窗口”的获取器之前,则“数据输入窗口”会出现两次,这不是我想要的。
解决方案应如下所示: 我想在“数据查看”窗口的“数据输入”窗口(然后在“按钮创建”窗口中)中引入数据。
谢谢大家。
解决方法
您应该能够在窗口之间使用事件传递值。看一下this discussion的示例。
,您应尝试将数据与视图分开(Windows) 您在这里可以做的是为所有3个窗口均可访问的所有数据提供一个类。然后,您可以将视图的dataContext设置为数据类的实例,以便绑定可以访问数据。 创建Windows时传递数据类的实例 例如ShowMyView(MyData myData) (有关更多信息,请查看MVVM模式。)
,您可以将值存储在变量中,并将其传递给Window4
:
private ImageBrush _nuestroIcono;
private string _tituloHabilidad;
private string _grupoHabilidad;
private int _nivelHabilidad;
void newBtn_Click(object sender,EventArgs e)
{
Window4 win4 = new Window4(_nuestroIcono,_tituloHabilidad,_nivelHabilidad);
win4.Show();
}
...
var vent = new Ventanal2(); //Ventanal2 is data entering window
if (vent.ShowDialog() == true)
{
_nuestroIcono = vent.retornoIcono();
_tituloHabilidad = vent.retornoTitulo();
_grupoHabilidad = vent.retornoGrupo();
_nivelHabilidad = vent.retornoNivel();
crearBoton(_tituloHabilidad,_grupoHabilidad,_nivelHabilidad,_nuestroIcono);
}
...
public Window4(ImageBrush nuestroIcono,string tituloHabilidad,int nivelHabilidad)
{
InitializeComponent();
//use the parameters...
}
请注意,无论您的母语是什么,都不要使用英文成员名称。