Как правильно заполнить список из наблюдаемой коллекции? - PullRequest
4 голосов
/ 08 февраля 2011

Я упростил это только для того, чтобы показать, что необходимо для демонстрации проблемы - то есть, хотя 8 элементов явно находятся в списке, они не имеют содержимого, то есть «Имя» не отображается, они просто пустые. Если я установлю точку останова сразу после того, как будет установлен ItemSource, я увижу, что источник был правильно заполнен коллекцией, поэтому я предполагаю, что что-то не так с моим xaml. Вот код и xaml:

public partial class MainPage : UserControl
{
    private ObservableCollection<ToolboxItem> ToolboxItems;

    public MainPage()
    {
        InitializeComponent();

        InitToolboxItems();
        lstToolbox.ItemsSource = ToolboxItems;
    }

    private void InitToolboxItems()
    {
        ToolboxItems = new ObservableCollection<ToolboxItem>();

        ToolboxItems.Add(new ToolboxItem(name: "Item1"));
        ToolboxItems.Add(new ToolboxItem(name: "Item2"));
        ToolboxItems.Add(new ToolboxItem(name: "Item3"));
        ToolboxItems.Add(new ToolboxItem(name: "Item4"));
        ToolboxItems.Add(new ToolboxItem(name: "Item5"));
        ToolboxItems.Add(new ToolboxItem(name: "Item6"));
        ToolboxItems.Add(new ToolboxItem(name: "Item7"));
        ToolboxItems.Add(new ToolboxItem(name: "Item8"));
    }

    public struct ToolboxItem
    {
        public String Name;
        public ToolboxItem(String name) { Name = name; }
    }
}

<Grid x:Name="LayoutRoot" Background="White">
    <ListBox Name="lstToolbox" Width="200" Height="280">
        <ListBox.ItemTemplate>
            <DataTemplate>
              <TextBlock Text="{Binding Name}" Width="100" Height="20" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

1 Ответ

5 голосов
/ 08 февраля 2011

Несмотря на то, что это на самом деле не вопрос (см. Предыдущие комментарии), ваша проблема связана с тем фактом, что поле 'Name' в вашем ToolBoxItem должно быть свойством, к которому можно привязываться. Поэтому измените его на:

public string Name {get; set;}

и должно работать.

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