Привязка Listview к нескольким источникам

#wpf #binding

#wpf #привязка

Вопрос:

Я столкнулся с проблемой и был бы рад, если бы вы могли помочь. Итак, я привязываю «Listview» к объекту «Feeds», который является объектом FeedViewModel.

Но в какой-то момент я хочу показать некоторые данные, которых нет в объекте FeedViewModel, но которые присутствуют в объекте MainViewModel . В моем случае, например, я хочу отображать URL-адрес для каждого канала, но URL-адрес не извлекается из извлечения Xpath источника, а передается из объекта MainViewModel, который я показал в коде с помощью MainViewModel.Url.

Но в моем XAML все дочерние элементы Listview просматриваются только в объекте «Feeds», что создает проблему.

  <ListView Grid.Row="3" Margin="5" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" HorizontalContentAlignment="Stretch" ItemsSource="{Binding Feeds}">
        <ListView.ItemTemplate>
            <DataTemplate>
                        --------------some code --------------
                        <Label Margin="4">Critic:</Label>
                        <Label Grid.Column="1" Content="{Binding Creator}" Margin="4" />
                        <Label Grid.Row="1" Margin="4">Title:</Label>
                        <Label Grid.Column="1" Grid.Row="1" Content="{Binding Title}" Margin="4" FontWeight="Bold" />
                        <Label Grid.Row="2" Margin="4">Location:</Label>
                        <Label Grid.Column="1" Grid.Row="2" Content="{Binding **MainViewModel.Url**}" Margin="4" />
                        <Label Grid.Row="3" Margin="4">Date:</Label>
                        <Label Grid.Column="1" Grid.Row="3" Content="{Binding Date}" Margin="4" />
                        <Label Grid.Row="4" Margin="4">Rating:</Label>
                        <Label Grid.Column="1" Grid.Row="4" Content="{Binding Rating}" Margin="4" />
                        <Label Grid.Row="5" Margin="4" HorizontalAlignment="Stretch">Description:</Label>
                        <TextBlock Grid.Column="1" Grid.Row="5" TextWrapping="Wrap" ScrollViewer.VerticalScrollBarVisibility="Auto" Text="{Binding Description}" Padding="4" Margin="4" />
                    </Grid>
                </Border>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
 

Может кто-нибудь подсказать, что можно сделать?

Gaurav

Ответ №1:

DataContext Изменен на шаблонный элемент, чтобы перейти к основной viewmodel, вы можете настроить таргетинг на родительское DataContext использование RelativeSource , например

 <Label Grid.Column="1" Grid.Row="2"
       DataContext="{Binding DataContext, RelativeSource={RelativeSource AncestorType=ListView}}"
       Content="{Binding Url}" Margin="4" />
 

Комментарии:

1. @gaurav: Рад, что это помогло. (Поскольку вы здесь новичок: вы можете принять мой ответ, щелкнув контур флажка слева.)