Как отобразить список <T>в списке? - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь отобразить список, который я создаю, в окне списка, и я не знаю, как

У меня есть класс, в который я добавляю новую книгу в код списка C #

public class Manager
{
    static List<Book> lstBook = new List<Book>();
    public void AddBookM(int isbn, string author, string des, string name, float price, ushort quantity, DateTime dateTime, string edition)
    {
        Book book = new Book(isbn, author, des, name, price, quantity,dateTime, edition, new List<string> { "" });
        lstBook.Add(book);
    }
}

теперь в XAML я хочу видеть книги в Списке в ListBox и в AutoSuggestBox, я хочу искать книги в списке, и это откроет возможности для завершения XAML кода

        <AutoSuggestBox Name="SBSearchBtn" HorizontalAlignment="Center" Width="500" FontSize="20" BorderBrush="Black" Header="Search" PlaceholderText="Write here!" Margin="0,90,0,0" VerticalAlignment="Top" TextChanged="SBSearchBtn_TextChanged" QuerySubmitted="SBSearchBtn_QuerySubmitted" SuggestionChosen="SBSearchBtn_SuggestionChosen"/>
    <ListBox Name="SearchList" Width="500" Margin="140,194,860,400" Background="WhiteSmoke" FontSize="25"/>

Ответы [ 2 ]

2 голосов
/ 04 мая 2019

Для отображения элементов в ListBox вам необходимо сделать следующее:

Во-первых, вам нужно определить шаблон элемента для вашего ListBox, чтобы вы могли указать, как будут выглядеть элементы списка.лайк.Для простоты я связал только свойства name и author из класса Book.

XAML

<ListBox Name="SearchList">
    <ListBox.ItemTemplate>
       <DataTemplate>
           <StackPanel>
               <TextBlock Text="{Binding author}"></TextBlock>
               <TextBlock Text="{Binding name}"></TextBlock>
           </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Я бы рекомендовал использовать ObservableCollection вместо простого List, поскольку вы хотите обновить списокэлементы, основанные на том, что пользователь ищет.

private ObservableCollection<Book> lstBook = new ObservableCollection<Book>();

Далее, в событии Loaded страницы (или любом другом событии, которое может потребоваться в зависимости от ваших требований) установите ItemSource из ListBox равным ObservableCollection, который вы создали (listBook).

private void Page_Loaded(object sender, RoutedEventArgs e)
{
     //Setting item source of the list box
     SearchList.ItemsSource = lstBook;

     //Adding an entry to lstBook 
     AddBookM(1, "auth", "des", "name", 2.55f, 10, DateTime.Now, "edition");            
}  

Теперь вы должны увидеть запись, добавленную в список.Преимущество использования ObservableCollection в этом сценарии состоит в том, что всякий раз, когда вы вносите изменения (добавляете / удаляете) любой элемент в ObservableCollection<Book> lstBook, ваш пользовательский интерфейс будет автоматически обновляться.

Таким образом, когда вы снова вызываете AddBookM(),Вы увидите, что новая запись также добавлена ​​в ListBox.

Надеюсь, это поможет.

0 голосов
/ 04 мая 2019

Вам нужно написать это вручную:

lstBook.Items.Add(book); // of course this is working only a ToString command to the Book class

Вы не сказали, о каком ListBox вы говорили, поэтому я предположил, что вы говорите о ListBox в библиотеке Windows Forms.

Надеялся, я тебе помог!

...