如何从其他窗口访问列表视图的项
本文关键字:列表 视图 访问 窗口 其他 | 更新日期: 2023-09-27 18:06:18
我的问题是关于我在主窗口中有一个ListView(使用c# 4.5和WPF xaml)。
我已经创建了函数(在主窗口中),它是从列表myList重新加载实例到我的myListView。然而,我不能使这个方法静态,也不能从其他窗口文件调用这个方法。另一方面,我可以从MainWindow.xaml.cs文件中调用这个函数。
我想做的是有一个现成的方法来调用(从整个解决方案),这将清除myListView(在主窗口)的属性项。此外,该函数将把myList中的每个myClass实例添加到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);
}
请问我是否描述得不够好
将函数本身作为参数传递给子类。在主窗口:
ChildWindow child = new ChildMyWindow(ReloadFunction);
在ChildWindow(或任何其他类)中:
class ChildWindow
{
public Action reloadonmain;
ChildWindow(Action _reloadonmain)
{
reloadonmain = _reloadonmain
}
ReloadButtonClick()
{
reloadonmain();
}
}
p。在wpf中,最好将ListView绑定到ObservableCollection。
如果不想将指针从一个窗口传递到另一个窗口,可以使用中介模式解耦代码。我们一直在代码中使用这个方法,它工作得很好。这对您来说可能是多余的,但这可以很好地扩展并保持代码解耦。
首先,定义一个消息枚举和一个中介类enum Messages
{
Clear
}
class Mediator
{
public static Mediator Instance = new Mediator();
public void Register(Message message, Action callback);
public void BroadcastMessage(Message message);
}
我将把实现细节留给您,但是中介类维护一个Dictionary<Message,List>在主窗口的构造函数中注册clear消息
Mediator.Instance.Register(Messages.Clear,ReloadFunction);
这将ReloadFunction动作添加到字典中,键值为"Messages.Clear"。现在,在代码的其他地方,您可以通过调用
来清除列表。Mediator.Instance.BroadcastMessage(Messages.Clear);
它将遍历所有注册到clear方法的Actions并调用它们