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

C# 如何从C中另一个类中的公共方法中获取值#,c#,wpf,getter,C#,Wpf,Getter,背景:我正在制作一个WPF应用程序。在本例中,我有一个包含用户控件的窗口和另一个包含用户控件中引入的信息的窗口。我有三个窗口:Main,我在其中创建按钮,数据输入窗口(该数据稍后使用showDialog()==true)和查看详细视图中的按钮数据 问题:当我想从另一个窗口获取变量到查看按钮信息窗口时,我遇到了问题。这个名为Window4的窗口不接收变量,因此将它们等于null 代码: 如果我在数据查看窗口的getter之前放置一个showDialog()If,那么数据输入窗口会出现两次,这不是我

背景:我正在制作一个WPF应用程序。在本例中,我有一个包含用户控件的窗口和另一个包含用户控件中引入的信息的窗口。我有三个窗口:Main,我在其中创建按钮,数据输入窗口(该数据稍后使用
showDialog()==true
)和查看详细视图中的按钮数据

问题:当我想从另一个窗口获取变量到查看按钮信息窗口时,我遇到了问题。这个名为Window4的窗口不接收变量,因此将它们等于null

代码:

如果我在数据查看窗口的getter之前放置一个showDialog()If,那么数据输入窗口会出现两次,这不是我想要的

解决方案应该是什么样的: 我想在我的数据查看窗口中获取数据输入窗口(然后在我的按钮创建窗口)中引入的数据


提前感谢大家。

您应该能够在窗口之间使用事件传递值。看看。

的示例,您应该能够使用事件在窗口之间传递值。请看一下的示例。

您应该尝试将数据与视图(窗口)分开 您可以在这里为3个窗口中的每个窗口都可以访问的所有数据创建一个类。然后可以将视图的dataContext设置为数据类的实例,以便绑定可以访问数据。 创建窗口时传入数据类的实例 e、 g.ShowMyView(MyData MyData)
(有关更多信息,请查看MVVM模式。)

您应该尝试将数据与视图(窗口)分开 您可以在这里为3个窗口中的每个窗口都可以访问的所有数据创建一个类。然后可以将视图的dataContext设置为数据类的实例,以便绑定可以访问数据。 创建窗口时传入数据类的实例 e、 g.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...
}

作为旁注,不管您的母语是什么,都不要使用英语成员名称是一种不好的做法。

您可以将值存储在变量中,并将其传递给
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...
}

顺便说一句,不管你的母语是什么,都不使用英语会员名称是一种不好的做法。

你考虑过单一窗口应用程序吗?因为这样,您的视图和数据将托管在一个东西中,该东西实例化了所有视图和数据,并且可以轻松地引用实例。您可以使用中介模式执行类似的操作。传递对中介(或依赖项注入)容器的引用,然后该容器充当“包”,保存对所有数据的引用。您是否考虑过使用单个窗口应用程序?因为这样,您的视图和数据将托管在一个东西中,该东西实例化了所有视图和数据,并且可以轻松地引用实例。您可以使用中介模式执行类似的操作。传递对中介(或依赖项注入)容器的引用,然后该容器充当“包”,保存对所有数据的引用。我应该在哪里找到变量实例,以便它在正确的时刻获取数据?您将使用。因此,基本上根据您的场景,当用户引入数据时,您应该从数据输入窗口触发一个事件,该事件将携带所有数据。您可以在其他地方收听此活动。例如,“数据查看”窗口接收该事件并相应地更新其UI组件。我应该在哪里找到变量实例,以便它在正确的时刻获取数据?您将使用。因此,基本上根据您的场景,当用户引入数据时,您应该从数据输入窗口触发一个事件,该事件将携带所有数据。您可以在其他地方收听此活动。例如,“数据查看”窗口接收该事件并相应地更新其UI组件。谢谢。为了让任何试图解决我的问题的人都能更轻松地完成这项工作:我所做的就是创建一个新类,并从那里实例化按钮创建中的变量,然后我将这些变量用作数据查看窗口的属性,这很有效。谢谢。为了让任何试图解决我的问题的人都能更轻松地完成这项工作:我所做的就是创建一个新类,并从那里实例化按钮创建中的变量,然后我将这些变量用作数据查看窗口的属性,这就行了。