如何从 C# 中的另一个 class 中的 public 方法获取值

How to get a value from a public method in another class in C#

上下文:我正在制作一个 WPF 应用程序。在这种情况下,我有一个带有用户控件的 window 和另一个带有用户控件中引入的信息的 windows。我有三个 windows:Main,我在其中创建按钮,数据输入 window(此数据稍后转到 main 以创建按钮,使用 showDialog()==true)和 View 按钮数据详细视图。

问题:当我想从另一个 window 获取变量到查看按钮信息 window 时遇到问题。这个名为 Window4 的 window 不接收变量,因此将它们等于 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();
}

如果我在数据查看 Window 的 getter 之前放置一个 showDialog() ,数据输入 Window 出现两次,这不是我想要的。

解决方案应该是什么样的: 我想在我的数据查看 Window.

中获取数据输入 Window(然后在我的按钮创建 Window)中引入的数据

在此先感谢大家。

您应该能够使用 windows 之间的事件传递您的值。看看 this discussion.

的例子

您应该尽量将您的数据与您的观点分开(windows) 你可以在这里做的是为你的 3 windows 中的每一个都可以访问的所有数据设置一个 class。然后,您可以将视图的 dataContext 设置为数据实例 class,以便绑定可以访问数据。 创建 windows 时传入数据实例 class 例如ShowMyView(我的数据我的数据) (有关更多信息,请查看 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...
}

附带说明一下,无论您的母语是什么,不使用英文成员名称是一种不好的做法。