2012-07-08 78 views
2

我有一个treeView从文本文件返回我的文本搜索结果。使用MVVM在WPF中打印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是在一个不同的用户控件 - 我把它放到SearchView(UC)中。

现在我想打印全部这棵树上的结果。我更喜欢用红色打印文档,强调搜索结果。

看起来像this

我试过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帮助!

回答

0

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

当使用MVVM,视图和视图模型之间的相互作用应该发生通过INotifyPropertyChanged Interface。 您可以将一个Property映射/绑定到一个UI元素;这会在Set上获得回拨。

这是我在mvvm-binding-treeview-item-changed上的一个例子。希望它有一些用处。