Вложенная привязка данных WPF; Как мне связать предмет внутри другого предмета - PullRequest
0 голосов
/ 20 мая 2011

У меня есть ListView, связанный с ObservableCollection CustomerContacts.Пока это прекрасно работает, но, будучи новичком в этом, я не уверен, как сделать следующую часть.Каждый контакт с клиентом имеет несколько типов контактов, которые я хочу отображать под своим именем.

Так что внутри CustomerContacts у меня есть еще одна наблюдаемая коллекция ContactTypes.

Вот мой текущий шаблон данных:

    <DataTemplate x:Key="iconTemplate">
        <DockPanel Height="133" Width="150">
            <Image Source="/Tracks%203.5;component/Images/NoPic.png" Height="25" Width="25" Margin="1,0" />
            <TextBlock DockPanel.Dock="Top" Text="{Binding FullName}" Margin="5,3,5,0" FontWeight="Bold" HorizontalAlignment="Left" />
            <<TextBlock Text="{Binding Title}" Margin="5,0,5,3" HorizontalAlignment="Left" />>
        </DockPanel>
    </DataTemplate>

И вот моя первая попытка поместить просмотр списка внутри:

    <DataTemplate x:Key="iconTemplate">
        <DockPanel Height="133" Width="150">
            <Image Source="/Tracks%203.5;component/Images/NoPic.png" Height="25" Width="25" Margin="1,0" />
            <TextBlock DockPanel.Dock="Top" Text="{Binding FullName}" Margin="5,3,5,0" FontWeight="Bold" HorizontalAlignment="Left" />
            <ListView ItemsSource="{Binding ContactTypes}">
                <ListView.Template>
                    <ControlTemplate TargetType="ItemsControl">
                        <ItemsPresenter/>
                    </ControlTemplate>
                </ListView.Template>
                <ListView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <StackPanel Orientation="Horizontal"/>
                    </ItemsPanelTemplate>
                </ListView.ItemsPanel>
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Margin="3,0,0,0" HorizontalAlignment="Center" Text="{Binding Path=ContactType}"/>
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
            <!--<TextBlock Text="{Binding Title}" Margin="5,0,5,3" HorizontalAlignment="Left" />-->
        </DockPanel>
    </DataTemplate>

Я хочу заменить TextBlock, связанный с Title, на ListView / ListBox / ItemsControl, связанный с элементами в ContactTypes.

Несколько похоже на этот вопрос: <<a href="/3576985/wpf-privyazka-k-spisku-vnutri-klassa"> WPF: привязка к списку внутри класса >, но без всего кода.Было бы неплохо иметь его в XAML.

1 Ответ

1 голос
/ 20 мая 2011

Здесь я бы сделал пару вещей:

  1. Упростите то, что вы пытаетесь сделать, чтобы выделить проблему.Вместо всего этого ListView бизнеса просто поместите туда ItemsControl: <ItemsControl ItemsSource="{Binding ContactTypes}" />, который даст вам представление по умолчанию, которое может просто показать вам тип данных ваших объектов (каким бы ни был ContactTypes), ноэто даст вам знать, работает ли привязка.Если это так, вы получите что-то в списке.Если это не так, вы не будете.

  2. Если у вас ничего нет в списке, используйте Snoop, чтобы углубиться в это и искать ошибки. Snoop показывает ошибки привязки данных, позволяет вам проверить DataContext каждого из элементов и т. Д.

  3. Если у вас все еще есть проблемы, это можетпринесите пользу нам, если вы разместите свои определения классов и код, где вы подключаетесь.Могут быть и другие лежащие в основе проблемы (например, является ли свойство ContactTypes пустым, когда привязка изначально возникает, и вы не используете INPC, чтобы сообщить системе привязки, когда она изменяется?).

...