如何从其他窗口访问列表视图的项

本文关键字:列表 视图 访问 窗口 其他 | 更新日期: 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并调用它们