2012-07-08 83 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上的一個例子。希望它有一些用處。