C # (WPF) - контекст данных приводит к просмотру, а не к субданным - PullRequest
0 голосов
/ 02 октября 2018

Я новичок в WPF MVVM, и я работаю над почти полным приложением.Есть только одна проблема, и я не могу понять, что я делаю неправильно.Позвольте мне добавить, что у меня есть только фон Winforms, и мне никогда не нужно было привязывать данные, поэтому, если решение кажется очевидным, вот почему.

            <!-- The list of download packages. -->
        <ListBox x:Name="PackagesList" DockPanel.Dock="Left" Width="120" ItemsSource="{Binding ViewRaster.RasterPackages}">
            <!-- Each individual package -->
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <WrapPanel>
                        <Image Height="16" Width="16" Source="{Binding PackageImage}"/>
                        <TextBlock Text="{Binding PackageName}"/>
                    </WrapPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
            <ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}">
                    <Setter Property="Tag" Value="{Binding PackageDownloads}"/>
                </Style>
            </ListBox.ItemContainerStyle>
        </ListBox>

У меня есть списокпакеты внутри объекта ViewRaster, как вы можете сказать из ItemSource списка.С каждым пакетом источника элемента я создаю элемент списка, который содержит изображение и текстовое поле с именем пакета и изображением пакета.

Теперь, следующий, есть "ItemContainerStyle", который яПредполагалось, что он работал бы точно так же, а именно: я мог бы использовать свойства каждого отдельного пакета, как это было связано с ItemsSource.

Кажется, я не могу получить доступ к индивидуальному «Пакет», как и в ItemTemplate -> DataTemplate.Необходимо, чтобы у меня в ListBoxItem был установлен тег "Tag" или "DataContext", равный "PackageDownloads".

От дизайнера он говорит, что не может найти "PackageDownloads" в контексте данныхмое представление, но я не в DataContext моего представления, я в DataContext ItemsSource.

Почему это?Как я могу это исправить?

1 Ответ

0 голосов
/ 02 октября 2018

Вам не нужно явно устанавливать свойство DataContext или его Tag для ListBoxItems, чтобы получить доступ к выбранному элементу из коллекции RasterPackages.

Выбранный объект RasterPackage напрямую доступен через ListBoxSelectedItem свойство:

<ListView
   ItemsSource="{Binding ElementName=PackagesList, Path=SelectedItem.PackageDownloads}">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...