Связывание с переменной в виде-модели

62
4

Это мой код XAML:

<ItemsControl  MinHeight="400" BorderThickness="0" ItemsSource="{Binding People}" ItemTemplateSelector="{StaticResource myItemsTemplateSelector}" />

И в ресурсах:

<UserControl.Resources>

<DataTemplate x:Key="ItemTemplate">
<Button CommandParameter="{Binding}" Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}, Path=DataContext.SelectSomething}" >
<StackPanel>
<TextBlock Text="{Binding Cars[0].Name}"></TextBlock>
<TextBlock Text="{Binding Cars[0].Description}"></TextBlock>
</StackPanel>
</Button>
</DataTemplate>

<selectors:MySelector ItemTemplate="{StaticResource ItemTemplate}" x:Key="myItemsTemplateSelector" />

</UserControl.Resources>

Люди - это ObservableCollection в моей модели представлений. Человек - это класс, обладающий этим свойством:

public IList<Cars> Cars { get; set; }

Как вы можете видеть, я привязываю текстовые блоки к Cars [0].Name and Cars [0].Description. Проблема у меня есть 0. Вместо 0 она должна быть переменной, которая определена в моей модели представления. Как я могу заставить привязку быть чем-то вроде этого:

<TextBlock Text="{Binding Cars[variableInVM].Name}"></TextBlock>

спросил(а) 2021-01-25T15:53:42+03:00 4 месяца, 2 недели назад
1
Решение
63

Я исправил эту проблему, создав новый класс, который обладает этими свойствами: Person, Cars и CurrentCars. Затем вместо привязки к Cars [index] я связываюсь с CurrentCars.

ответил(а) 2021-01-25T15:53:42+03:00 4 месяца, 2 недели назад
44

Вы можете использовать IMultiBindingConverter, а затем использовать MultiBinding который связывает Cars и variableInVM и использует ваш конвертер.

Конвертер просто возвращает элемент variableInVM для Cars.

Внутри этого элемента вы бы DataTemplate в своем вопросе, и он использовал бы Автомобиль, который прошел.

ответил(а) 2021-01-25T15:53:42+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема