我的问题是关注ListView我在MainWindow中使用的那个(使用C#4.5和WPF xaml)。
我创建了一个函数(在MainWindow中),它将实例从List myList重新加载到myListView。 但是我不能使这个方法静态,也不能从其他窗口文件中调用此方法。另一方面,我可以从MainWindow.xaml.cs文件中调用此函数。
我想要做的是有一个现成的方法来调用(从整个解决方案),它将清除myListView的属性Items(在MainWindow中)。此外,该函数会将myList的每个实例从myList添加到listView。
有一些代码可以更好地形象化我的意思:
public static List<MyClass> myList = new List<SingleThought>();
public void ReloadFunction()
{
this.myListView.Items.Clear();
foreach (MyClass myClass in myList)
this.myListView.Items.Add(myClass);
}
请问我是否描述得不够好。
答案 0 :(得分:0)
将函数本身作为参数传递给子类。 在MainWindow:
ChildWindow child = new ChildMyWindow(ReloadFunction);
在ChildWindow(或任何其他类)中:
class ChildWindow
{
public Action reloadonmain;
ChildWindow(Action _reloadonmain)
{
reloadonmain = _reloadonmain
}
ReloadButtonClick()
{
reloadonmain();
}
}
PS。在wpf中,您最好通过绑定ListView to an ObservableCollection来获得最佳服务。这将消除重新加载的需要。
答案 1 :(得分:0)
如果您不想将指针从一个窗口传递到另一个窗口,则可以使用介体模式对代码进行解耦。我们在代码中一直使用这种方法,效果很好。这可能对你来说太过分了,但这可以很好地扩展并保持代码解耦。
首先,定义消息枚举和中介类
enum Messages
{
Clear
}
class Mediator
{
public static Mediator Instance = new Mediator();
public void Register(Message message, Action callback);
public void BroadcastMessage(Message message);
}
我将把实现细节留给您,但是mediator类维护一个Dictionary&lt; Message,List&lt; Action&gt;&gt;。
在主窗口的构造函数中,您注册了清除消息
Mediator.Instance.Register(Messages.Clear,ReloadFunction);
这将ReloadFunction Action添加到具有“Messages.Clear”键的字典中。现在,您可以在代码中的任何其他位置通过调用
清除列表Mediator.Instance.BroadcastMessage(Messages.Clear);
将迭代注册到clear方法的所有Actions并调用它们。