CollectionViewSource:TreeView没有更新,ViewModel看起来不错

时间:2015-08-29 03:57:45

标签: wpf xaml treeview grouping

我试图填充TreeView中的TestExplorerControl

Rubberduck TestExplorer WPF control

我从来没有使用CollectionViewSource,所以我使用this tutorial来掌握如何在XAML中对ObservableCollection<TestMethod>进行分组,并将该分组用于我的树视图 - 我在<UserControl.Resources>中实现了数据模板,因为我希望最终允许用户更改测试重组方式的灵活性:

<CollectionViewSource x:Key="OutcomeGroupViewSource" Source="{Binding Model.Tests}">
  <CollectionViewSource.GroupDescriptions>
    <PropertyGroupDescription PropertyName="Result.Outcome" />
  </CollectionViewSource.GroupDescriptions>
</CollectionViewSource>

<DataTemplate x:Key="TestMethodTemplate" DataType="{x:Type local:TestMethod}">
  <StackPanel Orientation="Horizontal">
    <Image .../>
    <TextBlock .../>
  </StackPanel>
</DataTemplate>

<HierarchicalDataTemplate x:Key="OutcomeTemplate" DataType="{x:Type CollectionViewGroup}"
  ItemsSource="{Binding Items}" 
  ItemTemplate="{StaticResource TestMethodTemplate}">
  <StackPanel Orientation="Horizontal">
    <Image ../>
    <TextBlock ../>
    <TextBlock ../>
  </StackPanel>
</HierarchicalDataTemplate>

然后我为实际的<TreeView>

添加了这个标记
<TreeView Grid.Row="2"
  ItemsSource="{Binding Source={StaticResource OutcomeGroupViewSource}, Path=View.Groups}"
  ItemTemplate="{StaticResource OutcomeTemplate}" />

此标记有什么问题,TreeView更新失败? ViewModel显然拥有我需要显示的所有数据(被击中的断点位于当前行,黄色):

debugger with a breakpoint in <code>TreeView_MouseDoubleClick</code> in the control's code-behind, showing a non-null <code>TestExplorerViewModel</code> context with 2 items in <code>Tests</code>

1 个答案:

答案 0 :(得分:1)

找到它。它是树视图中Path绑定的ItemsSource

ItemsSource="{Binding Source={StaticResource OutcomeGroupViewSource}, Path=View.Groups}"

Path=View.Groups满足IntelliSense,但错误。

它必须是Path=Groups,即使设计师认为无法解析该属性:

Path=Groups => Cannot resolve property 'Groups' in data context of type 'System.Windows.Data.CollectionViewSource'