2010-05-22 2 views
1

Простой вопрос Silverlight: у меня есть ObservableCollection <MyObject> в моей модели. Каждый объект MyObject имеет свойство Label. Если я связываю ListBox с коллекцией и устанавливаю DisplayMemberPath в Label или устанавливаю ItemTemplate в TextBlock, который связывает свойство Text с Label, все работает так, как ожидалось.Связывание с наблюдаемымОбращение пользовательских правил

Если я изменяю объект MyObject таким образом, что он происходит из UserControl, текст метки больше не отображается в ListBox; каждый элемент просто отображается как пустая полоса высотой в несколько пикселей. Почему это? Очевидно, кое-что мне не хватает здесь о том, как визуализируются разные вещи.

ответ

2

ListBox определяет, что набор элементов в его ItemsSource уже является UIElement экземплярами и поэтому решает использовать эти элементы непосредственно в качестве содержимого создаваемых ими элементов ListBoxItem.

+0

Спасибо. Это то, что меня разочаровывает в XAML - я могу дать ему очень конкретные инструкции, чтобы сделать контент определенным образом, и он полностью игнорирует их! – nlawalker

+0

nlawalker: Либо они не ожидали этого сценария, либо, возможно, они чувствовали, что стоимость работы над этим сценарием не была предпринята. В конце концов, довольно странно брать набор UIElements и рассматривать их как данные – AnthonyWJones

1

Вы можете изменить это поведение, создав свой собственный элемент ItemsControl, переопределив IsItemItsOwnContainerOverride, как объяснено в ответе на this post.

Смежные вопросы