2012-05-10 147 views
0

对于我的项目,我需要一个scatterview,但我们称之为不使用surface sdk :)的人的列表框,并且它绑定到我的viewmodel中的可观察对象集合。根据对象的种类,我使用不同的数据模板(图像,视频,...)WPF Listbox在运行时更改容器

这些项目的容器默认为listboxitem。

但有一个特殊的对象,我需要比普通的listboxitem更多的容器,所以我创建了我的customlistboxcontainer。如果在这里找到了如何使用容器:

Have a databound WPF Listbox generate subclassed ListboxItems

,但这是不够的。我需要在运行时检查哪些项目已添加到集合中,并为其选择正确的容器(listboxitem,customlistboxitem)。我似乎无法得到工作。

有没有人有这样的经验?

THX,

比约恩

+0

那么,你可能会更具体一点,你想添加什么项目,也许它会证明你毕竟不需要特殊的容器。如果你真的这样做,你可以详细说明你如何实现添加项目功能。 –

回答

0

如果您需要为不同类型的项目提供了不同的模板,我建议提供您的ListBox一个DataTemplateSelector。我认为MSDN的例子很清楚如何实现它,但让我们知道你是否需要进一步的帮助。

更新: 这是另一个tutorial为了让你开始。

+0

感谢您的帮助,但这还不够。我正在使用这个allready有不同的意见,但我真的需要不同的容器,因为有些方法需要重写。并且使用数据模板选择器,您不能选择容器。 –

+0

@BjornVdkerckhove如何使用MyListBoxItem填充ObservableCollection,并重写ListBox上的IsItemItsOwnContainerOverride以始终返回true?它不是纯粹的MVVM,但它允许您在绑定之前指定容器。 –

+0

这值得一试! –