【问题标题】:Subclassing ItemsControl or some other tactic?子类化 ItemsControl 或其他策略?
【发布时间】:2011-08-10 05:29:55
【问题描述】:

我正在尝试创建自定义控件。这个控件需要一个像列表框或树视图一样工作的绑定,它可以绑定到 ObservableCollection 并根据需要添加和删除项目。但是,添加到集合中的项目不会直接显示在 UI 上。它们将被处理,然后根据需要添加到控件中。例如,如果传入一个表示文件完整路径的字符串,它将被添加到 TreeView 中,每个目录都是一个新节点。

我尝试将自定义控件创建为 ItemsControl 的子类,然后绑定可以工作,但我不知道如何知道何时将项目添加到控件中以便我可以处理它。我还考虑将 ObservableCollection 类型的 DependencyProperty 添加到控件,然后根据以下说明绑定到它:http://msdn.microsoft.com/en-us/library/aa970563.aspx。但是以这种方式设置它根本不允许我绑定到 DependencyProperty。

此时,我不在乎我用什么方法到达那里,只要我能从第一段得到结果。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: wpf controls itemscontrol subclassing


    【解决方案1】:

    通过在您的控件中覆盖OnItemsChanged,您可以在绑定到ItemsSourceObservableCollection 中添加或删除项目时运行所需的任何代码(在填充Items 属性期间)。此方法的参数与直接连接到 OC 事件时得到的 NotifyCollectionChangedEventArgs 相同。

    这样做可以让您采取与您正在考虑的新 OC 属性相同的操作,但继续使用内置的 ItemsSource 属性将集合绑定到控件。

    【讨论】:

    • 感谢您的回复。这不是我想要的,但它让我到达了我需要的地方。显然,从我通过调试看到的情况来看,仅在首次创建控件时才会触发 OnItemsChanged 事件。但是,只要将项目添加到绑定集合中,就会触发 OnItemsSource 更改事件。
    猜你喜欢
    • 2014-10-18
    • 2013-02-16
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多