Как условно изменить свойства элементов управления в CellTemplate связанного с данными WPF ListView?

Хорошо ... Я новичок в WPF, но я вроде как знаю, как делать что-то с помощью DataTrigger и Converter.

Но то, что я хочу, кажется немного более сложным. Позвольте мне сообщить вам подробности:

DataContext для элемента управления ListView - это список объектов (object = Room). Это доступные номера. У меня есть еще один элемент управления (скажем, это TextBox), который привязан к одному из объектов Room, содержащихся в IList. Я хочу отображать изображение только для комнаты (ListViewItem), привязанной к другому элементу управления.

Это часть моего XAML:

<TextBox Name = "Room" />
<ListView Name = "RoomsList" SelectionMode = "Single">
    <ListView.View>
        <GridView>
            <GridViewColumn Width = "32">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <!-- 
                           Here's where I want to change the Source property
                           depending on whether or not the item matches the
                           TextBox DataContext.
                        -->
                        <Image Source = "Images/Check.png" />
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn Header = "Room Name" Width = "150" HeaderContainerStyle = "{StaticResource textHeaderStyle}" 
                DisplayMemberBinding = "{Binding Path=RoomName}" />
        </GridView>
    </ListView.View>
</ListView>

Я как бы застрял на этом. Есть идеи, как подойти к этому?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
942
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете написать MultiValueConverter, который возвращает видимость и принимает DataContext в качестве первого значения преобразователя, а конкретный объект «Комната» - в качестве второго значения (используйте привязку ElementName с Element как «Room») Если значения совпадают, отобразите элемент управления изображением, то есть привязку imgControl.Visibility к конвертеру.

Предполагая, что объект вашей комнаты содержит изображение или ссылку на изображение, вы можете использовать свойство SelectedIndex ListView и выполнить привязку к полю изображения.

<TextBox Name = "Room" Text = "{Binding ElementName=RoomsList.SelectedItem, Path=Picture}" />

Где Roomlist.Picture - фотография, которую вы хотите отобразить. Если это URL-адрес, вам, вероятно, придется сделать это, это тег изображения, содержащийся в текстовом поле. Обратите внимание, что я не тестировал этот код, поэтому его, возможно, придется немного подправить, чтобы заставить его работать.

Другие вопросы по теме