【问题标题】:Creating an instance of SelectionChangedEventArgs in wpf在 wpf 中创建 SelectionChangedEventArgs 的实例
【发布时间】:2011-04-18 17:07:54
【问题描述】:

我有一个用户控件,里面有一个列表视图。此列表视图的 SelectionChanged 事件在用户控件内处理。相同的代码如下:

私人无效 lstvMyView_SelectionChanged(对象发送者,SelectionChangedEventArgs e) {...}

我想从用户控件内的其他地方再次调用这个处理程序。所以要调用这个处理程序,我需要那里的“SelectionChangedEventArgs”。当我尝试创建“SelectionChangedEventArgs”的实例时,我无法理解应该将什么作为参数传递给“SelectionChangedEventArgs”的构造函数。

我想调用这个处理程序的地方不会在列表视图中添加或删除任何项目。它只是在列表视图中的项目中导航,从而更改列表视图的选定索引。

我正在尝试做这样的事情。下面的代码显然是不正确的。

lstvMyView_SelectionChanged(_lstvMyView, new SelectionChangedEventArgs());

【问题讨论】:

    标签: wpf wpf-controls


    【解决方案1】:

    我想从用户控件中的其他地方再次调用这个处理程序

    不要。不应从您的代码中显式调用事件处理程序。无论你在这个处理程序中做什么,你都可以把它放在另一个只接受它需要的参数的方法中,然后从你的代码中调用 that 方法。

    【讨论】:

    • 嗯...但是如果处理程序中的代码在其中使用 e 怎么办?托马斯,还有 1 个请求,我在这个论坛上添加了一个问题,但找不到任何答案,你能帮我看看吗..!!!链接为:stackoverflow.com/questions/3777683/…
    • 真的需要e参数吗?它可能只需要 一些 属性...只需将它们传递给您的方法
    • 这听起来不错。会试试这个!谢谢你的时间..!! :) 托马斯,你有没有尝试过我遇到的另一个问题?请检查一下,因为我真的很想让它工作..!!
    • 我正在对一些代码进行单元测试,并希望实例化一个 SelectionChangedEventArgs 对象以用于测试目的(发送到组合框的 OnSelectionChanged 方法。被告知不要让我挂在这里。
    • @JasonFuerstenberg,我并不是说您不应该实例化 SelectionChangedEventArgs;我只是说你不应该直接调用事件处理程序。
    【解决方案2】:

    SelectionChangedEventArgs 可以被实例化以进行单元测试,如下所示:

    new SelectionChangedEventArgs(
        System.Windows.Controls.Primitives.Selector.SelectionChangedEvent, 
        new List<CustomViewModel> { }, 
        new List<CustomViewModel> { customViewModel }
    )
    

    注意removedItemsaddedItems 不能为空,所以应该传递一个空集合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-26
      相关资源
      最近更新 更多