WPF嵌套数据绑定;如何绑定到另一个项目中的项目

时间:2011-05-20 14:02:09

标签: wpf vb.net data-binding listview observablecollection

我有一个ListView绑定到CustomerContacts的ObservableCollection。 它到目前为止工作得很好,但对此我不熟悉,我不知道如何做下一部分。 每个客户联系人都有几种联系方式,我希望以其名义显示。

因此,在CustomerContacts内部,我有另一个ContactTypes的ObservableCollection。

这是我目前的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" />
            <<TextBlock Text="{Binding Title}" Margin="5,0,5,3" HorizontalAlignment="Left" />>
        </DockPanel>
    </DataTemplate>

这是我第一次尝试将listview放入其中:

    <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>

我想用绑定到ContactTypes中的项目的ListView / ListBox / ItemsControl替换绑定到Title的TextBlock。

与此问题有些相似:&lt; WPF: bind to a List inside a class&gt;但没有所有的代码隐藏。将它放在XAML中会很高兴。

1 个答案:

答案 0 :(得分:1)

我会在这里做几件事:

  1. 简化您要尝试做的事情以隔离问题。而不是整个ListView业务,只需添加ItemsControl<ItemsControl ItemsSource="{Binding ContactTypes}" />这将为您提供事物的默认视图,这可能只显示对象的数据类型(无论ContactTypes是什么),但它会让你知道绑定是否有效。如果是,您将在那里列出某些。如果不是,你就不会。

  2. 如果您没有列出任何内容,请使用Snoop钻取并查找错误。 Snoop显示数据绑定错误,允许您检查每个项目的DataContext等。

  3. 如果您仍然遇到问题,如果您发布了类定义和代码,那么我们可能会对您有所帮助。可能存在一些其他潜在问题(例如,当绑定最初发生时,ContactTypes属性为null,并且您没有使用INPC让绑定系统知道它何时发生更改?)。