如何从其他窗口访问listView的项目

时间:2015-08-04 21:49:11

标签: c# wpf listview

我的问题是关注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);
}

请问我是否描述得不够好。

2 个答案:

答案 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并调用它们。