我有一个ListView绑定到CustomerContacts的ObservableCollection . 它到目前为止工作得很好,但对此我不熟悉,我不知道如何做下一部分 . 每个客户联系人都有几种联系类型,我想在其名称下显示 .
所以在CustomerContacts里面我有另一个ContactTypes的ObservableCollection .
这是我目前的数据模板:
<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 .
有点类似于这个问题:<WPF: bind to a List inside a class>但没有所有的代码隐藏 . 将它放在XAML中会很不错 .
1 回答
我会在这里做几件事:
简化您要尝试做的事情以隔离问题 . 而不是整个
ListView
业务,只需在那里放一个ItemsControl
:<ItemsControl ItemsSource="{Binding ContactTypes}" />
,如果绑定工作正常,请告诉您 . 如果是的话,你会在那里找到一些东西 . 如果不是't, you won't .如果您没有列出任何内容,请使用Snoop钻取并查找错误 . Snoop显示数据绑定错误,允许您检查每个项目的
DataContext
等 .如果您仍然遇到问题,如果您发布了您的课程定义和代码,那么我们可能会对您有所帮助 . 可能存在一些其他潜在问题(例如,当绑定最初发生时,ContactTypes属性为null,并且您没有使用INPC让绑定系统知道它何时发生更改?) .