如何从C#中另一个类的公共方法获取值

问题描述

上下文:我正在制作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的示例。

,

您应尝试将数据与视图分开(Win​​dows) 您在这里可以做的是为所有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...
}

请注意,无论您的母语是什么,都不要使用英文成员名称。