ListBox внутри другого ListBox - PullRequest
       0

ListBox внутри другого ListBox

1 голос
/ 16 октября 2011

У меня есть простой класс, подобный этому:

public class myClass
{
    public List<string> innerList;
    public string innerString{get;set;}
}

А затем у меня есть список объектов этого класса: List .Например, содержимое этого списка:

myList = new List<myClass>{
    new myClass{
        innerList = new List<string>{
            "1", "2", "3", "4"
        },
        innerString = "First String"
    },
    new myClass{
        innerList = new List<string>{
            "a", "b", "c", "d"
        },
        innerString = "Second String"
    }
};

Я хочу отобразить контекст этого массива в следующей форме:

First String
  1  2  3

Second String
  a  b  c

Примечание: на самом деле я не могу объединить 1 + 2 + 3 и+ b + c, потому что у меня есть не строковый массив, а массив BitmapImage (поэтому я думаю, что для этого мне нужен еще один список)

Итак, я думаю, мне следует создать список внутри другого списка.Но, возможно, есть лучший способ сделать это.

Вот мой не-рабочий код XAML:

<ListBox x:Name="myListBox" ItemsSource="{Binding ''}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding innerString}"/>
                <ListBox x:Name="innerListBox" ItemsSource="{Binding innerList}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <TextBox Text="{Binding ''}"/>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Он отображает только «Первая строка» и «Вторая строка», но не «1 23 "и" abc ".

Что я должен сделать, чтобы отобразить содержимое массива в другом массиве?

1 Ответ

2 голосов
/ 16 октября 2011

если вы удалите шаблон элемента списка для внутреннего списка, ваш xaml должен работать нормально.

Если вы не предоставите ItemTemplate, то используется ListItem по умолчанию, который просто вызывает ToString() метод DataContext, который в данном случае является string

Еще одна вещь, которую стоит отметить, это то, что если вы хотите, чтобы ваш список динамически обновлялся, вы должны использовать ObservableCollection<string> вместо List<string>. ObservableCollection реализует INotifyCollectionChanged, который сообщает UI, что элемент добавлен или удален.

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