none
自定义类似ListBox的控件,如何根据DataTemplate渲染Item的元素显示和绑定? RRS feed

  • 问题

  • 自定义一个控件,这个控件类似ListBox,,带有ItemsSource和ItemTemplate属性,也就是IEnumerable和DataTemplate。但没有继承ItemsControl

    如果使用该自定义控件,在xaml上,ItemsSource有绑定数据集合,向ItemTemplate属性提交了数据模板实例(比如在xaml上编写DataTemplate的xaml代码),自定义控件内遍历ItemsSource绑定数据集合的循环内,如何方便地利用ItemTemplate基于数据模板创建Item的FrameworkElement实例,Item实例与数据集合内的元素建立绑定关联,并通过内部的Panel控件的Children.Add方法添加通过数据模板创建的Item实例?

    我不知道怎么利用ItemTemplate渲染内容,要递归遍历DataTemplate所有的内容,并创建实例?遍历过程中做什么?使用自定义控件,事先不知道向ItemTemplate属性提交的DataTemplate实例内到底有哪些控件的属性是绑定的。

    自定义控件的ItemsSource绑定的数据集合类型若是ObservableCollection类型,使用数据集合时调用了Add或Remove方法,自定义控件这边要怎么知道数据集合内被移除或新增了?如何知道被移除的item或新增的item是哪个?以便于做其他处理?

    有演示例子吗?

    2022.11.15 更新:

    我现在已经知道答案了,根据DataContext的LoadContent创建FrameworkElement实例,然后放入到ItemView的Content属性中,然后把绑定项赋值给ItemView的DataContext属性。就可以实现Item的元素显示和绑定了。

    对于绑定数据集合监听的方式,确定跟ObservableCollection的CollectionChanged事件有关






















    • 已编辑 Trian555 2022年11月15日 4:32
    2022年11月13日 9:08

答案