Программно обязательный Список к ListBox

Скажем, например, у меня есть следующее чрезвычайно простое окно:

<Window x:Class="CalendarGenerator.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1"
        Height="300"
        Width="447">
  <Grid>
    <ListBox Margin="12,40,0,12"
             Name="eventList"
             HorizontalAlignment="Left"
             Width="134" />
  </Grid>
</Window>

И простой список, определенный как:

List<String> ListOfNames = new List<String>();

И давайте предположим, что список имеет несколько имен в нем. Как я пошел бы о привязке Списка в ListBox с помощью как можно больше кода - позади?

22
задан Ehsan 31 July 2019 в 20:09
поделиться

4 ответа

Сначала необходимо было бы дать ListBox имя так, чтобы это было доступно от кода позади ( редактирование , я отмечаю, что Вы уже сделали это, таким образом, я изменю свое имя ListBox в качестве примера для отражения Вашего):

<ListBox x:Name="eventList" ... />

Тогда это столь же просто как установка свойства Поля списка ItemsSource к Вашему списку:

eventList.ItemsSource = ListOfNames;

, Так как Вы определили свой объект "ListOfNames" как List<String>, ListBox автоматически не отразит изменения, внесенные в список. Чтобы заставить WPF's, связывающий с данными реагировать на изменения в рамках списка, определите его как ObservableCollection<String> вместо этого.

39
ответ дан 29 November 2019 в 03:32
поделиться

Если список данных создается в коде тогда, Вы оказываетесь перед необходимостью связывать его в коде, как так:

eventList.ItemsSource = ListOfNames;

Теперь привязка к списку строк является очень простым примером. Давайте возьмем более сложный.

Говорят, что у Вас есть класс человека:

public class Person {
    public string FirstName { get; set; }
    public string Surname { get; set; }
}

Для отображения списка людей Вы могли связать список с ListBox, но Вы закончите с полем списка, которое отображает "Человека" для каждой записи, потому что Вы не сказали WPF, как отобразить объект человека.

Для сообщения WPF, как визуально отобразить объекты данных, как которые мы определяем DataTemplate так:

<Window.Resources>
    <DataTemplate DataType="{x:Type l:Person}">
        <StackPanel Orientation="Horizontal">
            <TextBlock Text="{Binding FirstName}"/>
            <TextBlock Text=" "/>
            <TextBlock Text="{Binding Surname}"/>
        </StackPanel>
    </DataTemplate>
</Window.Resources>
<Grid>
    <ListBox Name="listBox" />
</Grid>

public Window1() {
    InitializeComponent();
    List<Person> people = new List<Person>();
    people.Add(new Person() { FirstName = "Cameron", Surname = "MacFarland" });
    people.Add(new Person() { FirstName = "Bea", Surname = "Stollnitz" });
    people.Add(new Person() { FirstName = "Jason", Surname = "Miesionczek" });
    listBox.ItemsSource = people;
}

Это приятно отобразит "Фамилию Firstname" в списке.

, Если Вы хотели изменить взгляд, чтобы быть, говорят" Фамилия , Firstname" все, что необходимо сделать, изменить XAML на:

<StackPanel Orientation="Horizontal">
    <TextBlock FontWeight="Bold" Text="{Binding Surname}"/>
    <TextBlock Text=", "/>
    <TextBlock Text="{Binding FirstName}"/>
</StackPanel>
19
ответ дан 29 November 2019 в 03:32
поделиться

Используйте Привязка класс, если Вы хотите настроить привязку:

List<String> listOfNames = new List<String>() {"a", "b"};
Binding myBinding = new Binding();
//set binding parameters if necessary
myBinding.Source = listOfNames;
eventList.SetBinding(ItemsControl.ItemsSourceProperty, myBinding);

или

непосредственно присваивают данные свойству ItemsSource:

eventList.ItemsSource = listOfNames;
15
ответ дан 29 November 2019 в 03:32
поделиться

eventList. ItemsSource = ListOfNames;

2
ответ дан 29 November 2019 в 03:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: