Реализация метода `.ItemsSource` в XAML - PullRequest
0 голосов
/ 11 января 2019

У меня есть простой ListBox в WPF XAML, которому я назначаю элементы из списка с именем tour со следующим однострочным кодом в C #:

listBoxDutyDays.ItemsSource = tour;

Я бы хотел сделать то же самое, но в XAML.

Вот как это выглядит:

<ListBox x:Name="listBoxDutyDays">
     <ListBox.ItemTemplate>
         <DataTemplate>
             <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="*"/>
                </Grid.ColumnDefinitions>
                <Label Grid.Column="0" Content="{Binding Day}"/>
                <Label Grid.Column="1" Content="{Binding Date}"/>
            </Grid>
        </DataTemplate>
     </ListBox.ItemTemplate>
</ListBox>

Как будет выглядеть код в XAML?

Я пробовал это соответственно:

<ListBox x:Name="listBoxDutyDays">
        <ListBox.DataContext>
            <ListBox ItemsSource="{Binding tour}"/>
        </ListBox.DataContext>

но это не сработало ...

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Я хочу добавить объяснение к ответу «Бхуванеш Джей».

Вам понадобятся 2 вещи, чтобы это заработало:

  1. Класс с Tour свойством. Такие как:

    private ObservableCollection<DutyDay> tour;
    
    public ObservableCollection<DutyDay> Tour
    {
        get
        {
            return tour;
        }
        set
        {
            tour = value;
            OnPropertyChanged(nameof(Tour));
        };
    }
    
  2. Установить этот класс как DataContext из ListBox (или любой другой элемент управления в иерархии ListBox)

Затем измените свой код на:

<ListBox x:Name="listBoxDutyDays" ItemsSource="{Binding tour}">

То, что вы пытались сделать в Xaml, не имеет смысла. Вы пишете:

<ListBox x:Name="listBoxDutyDays">
    <ListBox.DataContext>
        <ListBox ItemsSource="{Binding tour}"/>
    </ListBox.DataContext>

Это в коде так же, как:

listBox.DataContext = new ListBox() 
{ 
    ItemsSource = \* Binding to tour *\
}
0 голосов
/ 12 января 2019

Попробуйте вот так

<ListBox x:Name="listBoxDutyDays" ItemsSource="{Binding tour}">
 <ListBox.ItemTemplate>
     <DataTemplate>
         <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>
            <Label Grid.Column="0" Content="{Binding Day}"/>
            <Label Grid.Column="1" Content="{Binding Date}"/>
        </Grid>
    </DataTemplate>
 </ListBox.ItemTemplate>

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