2

我有一个 treeView 从文本文件返回我的文本搜索结果。

<TreeView ItemsSource="{Binding FirstGeneration}"
             ...>
  <TreeView.ItemContainerStyle.../>
  <TreeView.ItemTemplate>
    <HierarchicalDataTemplate ItemsSource="{Binding Children}">
      <StackPanel Orientation="Horizontal" FlowDirection="LeftToRight">
        <TextBlock Text="{Binding PreExp}" />
        <TextBlock Text="{Binding Exp}"
          FontStyle="{Binding FontStyle}"
          Foreground="{Binding Color}"  />
        <TextBlock Text="{Binding PostExp}" />
      </StackPanel>
    </HierarchicalDataTemplate>
  </TreeView.ItemTemplate>
</TreeView>

为了将结果作为树获得(因为我们从 C++ 项目中以列表的形式获得结果),我们创建了一个逻辑树并将 exp 显示为红色。我将它们分成三个文本框。

treeView 位于不同的 UserControl 中 - 我将其放入 SearchView (UC) 中。

现在我想在这棵树上打印所有结果。我更喜欢在打印文档时强调搜索结果为红色。

看起来像这样

我尝试了PrintDialog.PrintVisual。问题是我无法到达树或搜索表达式,因为 ViewModel 不知道视图等。

虽然我在下面这段代码后面的代码中尝试了它,但它只打印他看到的内容,而不是整个树的结果。

PrintDialog dialog = new PrintDialog();
if (dialog.ShowDialog() != true)
  return;
dialog.PrintVisual(SearchResultTree, "The Search Result Tree");

我也尝试了FlowDocument的选项:

FlowDocument doc = new FlowDocument();
foreach (SearchObjectViewModel item in tv.Items)
  doc.Blocks.Add(new Paragraph(new Run(item.PreExp+item.Exp+item.PostExp)));
pd.PrintDocument(((IDocumentPaginatorSource)doc).DocumentPaginator,exp);

10x 4 帮助!

4

1 回答 1

0

问题是我无法到达树或搜索表达式,因为 ViewModel 不知道视图等。

使用 MVVM 时,View 和 ViewModel 之间的交互应该通过INotifyPropertyChanged Interface发生。您可以将一个属性映射/绑定到一个 UI 元素;它会在 Set 上得到回调。

这是我关于mvvm-binding-treeview-item-changed 的​​示例之一。希望有点用处。

于 2013-02-25T04:16:14.577 回答