【问题标题】:How to access Items of listView from other window如何从其他窗口访问 listView 的项目
【发布时间】:2015-08-05 06:23:53
【问题描述】:

我的问题与我在 MainWindow 中的 ListView 相关(使用 C# 4.5 和 WPF xaml)。

我创建了函数(在 MainWindow 中),它将实例从 List myList 重新加载到 myListView。 但是我不能使这个方法静态,也不能从其他窗口文件调用这个方法。另一方面,我可以从 MainWindow.xaml.cs 文件中调用此函数。

我想要做的是有一个准备好的方法来调用(从整个解决方案中),它将清除 myListView 的属性项目(在 MainWindow 中)。此外,该函数会将 myClass 的每个实例从 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);
}

请问我是不是描述的不够好。

【问题讨论】:

    标签: c# wpf listview


    【解决方案1】:

    将函数本身作为参数传递给子类。 在主窗口中:

    ChildWindow child = new ChildMyWindow(ReloadFunction);
    

    在 ChildWindow(或任何其他类)中:

    class ChildWindow
    {
        public Action reloadonmain;
    
        ChildWindow(Action _reloadonmain)
        {
            reloadonmain = _reloadonmain
        }
    
        ReloadButtonClick()
        {
            reloadonmain();
        }
    }
    

    PS。在 wpf 中,最好通过绑定 ListView to an ObservableCollection 来为您服务。这将消除重新加载的需要。

    【讨论】:

      【解决方案2】:

      如果您不想将指针从一个窗口传递到另一个窗口,您可以使用中介模式解耦代码。我们一直在代码中使用这种方法,效果很好。这对您来说可能有点矫枉过正,但这样可以很好地扩展并保持代码解耦。

      首先,定义一个消息枚举和一个中介类

      enum Messages
      {
          Clear
      }
      
      
      class Mediator
      {
           public static Mediator Instance = new Mediator();
           public void Register(Message message, Action callback);
           public void BroadcastMessage(Message message);
      }
      

      我将把实现细节留给你,但中介类维护一个 Dictionary>。

      在主窗口的构造函数中,您注册了明确的消息

      Mediator.Instance.Register(Messages.Clear,ReloadFunction);
      

      这会将 ReloadFunction Action 添加到具有“Messages.Clear”键的字典中。现在,在您的代码中的其他任何地方,您都可以通过调用来清除列表

      Mediator.Instance.BroadcastMessage(Messages.Clear);
      

      这将遍历所有注册到 clear 方法的 Actions 并调用它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-25
        • 1970-01-01
        • 2013-03-13
        • 1970-01-01
        • 2018-03-14
        相关资源
        最近更新 更多