我想在至少两个wpf窗口之间共享以下类:
namespace WPF
{
class dd_internals
{
public int current_process_index;
public class process_class
{
public string process_name;
public List<string> parm_list;
public List<string> var_list;
public List<string> statements;
}
public List<process_class> process_list = new List<process_class>();
}
}
我如何在多个窗口之间共享此类的单个实例?
好的代码显示dd_internals
被传递到window1
的构造函数中,但不能直接在window1
的成员函数中使用。
namespace posting2
{
public partial class Window1 : Window
{
public void Member()
{
int y = Data.current_process_index;
// Error: the name 'Data' does not exist in the current context
}
public Window1(dd_internals data)
{
int x = data.current_process_index;
// ok, it works here.
InitializeComponent();
}
}
}
答案 0 :(得分:3)
有几个选项,例如:
您可以将其存储在Application.Properties
中Application.Current.Properties [“Key”] = myobject;
更大的应用程序的最佳选择是使用一些依赖容器(它有很多实现)并将共享对象存储在这样的容器中
答案 1 :(得分:1)
var dd = new dd_internals();
var window1 = new YourWindow(dd);
var window2 = new YourWindow(dd);
您对dd
所做的任何更改都将在所有窗口实例中提供。如果您需要处理多线程之类的事情,或者在更改内容时dd
调用某些内容,则需要将其添加到您的问题中。
您的编辑在语法上无效; C#区分大小写,因此Data
和data
是两个不同的标识符,其中一个未声明。我猜你想要的东西是:
public partial class Window1 : Window
{
private readonly dd_internals myDd;
public void Member()
{
int y = myDd.current_process_index;
}
public Window1(dd_internals data)
{
InitializeComponent();
myDd = data;
}
}
在您的真实项目中,请使用比“数据”,“Window1”等更好的名称。这些名字并不意味着什么;在一个简短的例子中,它们很有用,但它们很快就使一个真正的程序难以理解。
答案 2 :(得分:0)
我认为您需要在将该类分享到任何地方之前将其设为公开或内部。
答案 3 :(得分:0)
你可以制作班级单身人士
public class dd_internals
{
private static dd_internals instance;
public static dd_internals singleInstance;
private dd_internals() { }
public static dd_internals Instance
{
get
{
if (instance == null)
{
instance = new dd_internals();
}
return instance;
}
}
public int current_process_index;
public class process_class
{
public string process_name;
public List<string> parm_list;
public List<string> var_list;
public List<string> statements;
}
public List<process_class> process_list = new List<process_class>();
}