Расширение WPF ListBoxItem для источников не работает - PullRequest
2 голосов
/ 29 июля 2011

Если я создаю класс, расширяющий ListBoxItem в WPF, создаю список этих объектов, пытаюсь связать этот список с ItemsSource ListBox, элементы не будут отображаться:

<ListBox ItemsSource="{Binding Path=LbData, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}">
    <ListBox.ItemTemplate>
        <DataTemplate >
            <TextBlock Text="{Binding Path=Display}" Margin="1" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
public partial class MainWindow : Window
{
    public IEnumerable lbData = new List<LbItem>();
    public IEnumerable LbData
    {
        get { return lbData; }
        set { lbData = value; }
    }

    public MainWindow()
    {
        InitializeComponent();
        LbData = new List<LbItem> { new LbItem("a"), new LbItem("b") };
    }
}

public class LbItem : ListBoxItem
{
    public string Display { get; private set; }

    public LbItem(string v)
    {
        Display = v;
    }
}

I 'Я новичок в WPF и не понимаю, почему это должно быть проблемой.ТИА

Ответы [ 2 ]

3 голосов
/ 29 июля 2011

ItemsSource обычно используется для объектов данных, и то, что вы делаете там (установка ItemTemplate), предполагает, что вы вообще не должны делать свой объект наследуемым от ListBoxItem, вместо этого он должен быть нормальным объектом(возможно, реализация INotifyPropertyChanged, если свойства могут измениться после создания).Если список изменяется, он должен реализовать INotifyCollectionChanged.

Поскольку элементы уже ListBoxItems, DataTemplate, которые вы установили, будут игнорироваться.В окне вывода Visual Studio должна быть следующая ошибка:

Ошибка System.Windows.Data: 26: ItemTemplate и ItemTemplateSelector игнорируются для элементов, уже имеющих тип контейнера ItemsControl;Type = 'LbItem'

0 голосов
/ 29 июля 2011

попробуйте установить LbData перед InitializeComponent (); или реализуйте INotifyPropertyChanged, также вы, вероятно, захотите привязать к коллекции ObservableCollection

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...