Чьи свойства действительно предоставляет привязка данных из кода? - PullRequest
0 голосов
/ 05 января 2020

Когда мы используем DataContext другого элемента управления, мы можем получить доступ к его свойствам, таким как Значение ниже.

<ProgressBar x:Name="my_prog" Height="10" Value="{Binding Value, ElementName=my_slider}"/>

Но я растерялся, когда мы назначаем контекст данных из кода, не должны ли мы также получить доступ к его свойствам ? Но в приведенном ниже примере контекст данных представляет собой список автомобилей, но как мы можем получить доступ к свойству Speed, которое принадлежит car, а не list? Этот пример правильно показывает скорость.

public partial class CarsView : Window
{
    public CarsView()
    {
        InitializeComponent();

        var cars = new List<Car>();

        for (int i = 0; i < 10; i++)
        {

            Car car = new Car();
            cars.Add(car);
            car.Speed = i * 10;
        }

        this.DataContext = cars;
    }
}

XAML

<Grid>
    <ListBox x:Name="listBoxCars" ItemsSource="{Binding}"  HorizontalAlignment="Left" Height="278" Margin="114,63,0,0" VerticalAlignment="Top" Width="252">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Speed}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
    </ListBox>
</Grid>

1 Ответ

0 голосов
/ 07 января 2020

DataContext элемента root в ItemTemplate (TextBlock в вашем случае) является текущим элементом в ItemsSource ListBox, т.е. Car объекта в этом дело.

Поэтому привязка к Speed работает при условии, что Speed является publi c свойством класса Car.

ItemTemplate применяется к каждому элементу в ItemsSource. Подробнее о том, как это работает, вы можете прочитать в документах .

...