2011-10-08 46 views
1

我試圖通過ViewModel將DocumentViewer綁定到文檔,並且根本沒有成功。在MVVM中綁定DocumentViewer

這裏是我的視圖模型的代碼...

private DocumentViewer documentViewer1 = new DocumentViewer(); 

    public DocumentViewerVM() 
    { 
     string fileName = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "Here an xps document.xps"); 
     XpsDocument document = new XpsDocument(fileName, FileAccess.Read);    
     documentViewer1.Document = document.GetFixedDocumentSequence();    
     document.Close(); 

    } 

    public DocumentViewer DocumentViewer1 
    { 
     get 
     { return documentViewer1; } 
     set 
     { 
      documentViewer1 = value; 
      OnPropertyChanged("DocumentViewer1"); 
     } 

    } 

這裏是在視圖中的XAML ...

<UserControl x:Class="DemoApp.View.DocumentViewerView" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
> 
    <Grid> 
     <DocumentViewer Name="DocumentViewer1" Document="{Binding Path=DocumentViewer1, UpdateSourceTrigger=PropertyChanged}" ></DocumentViewer> 

    </Grid> 
</UserControl> 

背後視圖的代碼包含不超過「的InitializeComponent其他代碼()'

我的確發現奇怪的是,如果將文檔生成代碼從視圖模型構造函數放入視圖構造函數中,文檔就會正確顯示,我認爲這是一個有約束力的問題,但我在哪裏或如何不知道。

+0

你在哪裏設置你的觀點作爲視圖模型的實例的DataContext的? –

+0

我正在按照這篇文章設置資源文件中的DataContext - http://msdn.microsoft.com/en-us/magazine/dd419663.aspx 示例: 我認爲這是行得通的,因爲我可以分解成DocumentViewer屬性 – Rob

回答

3

您正在將DocumentViewerDocument屬性綁定到名爲DocumentViewer1的屬性,該屬性本身就是DocumentViewerDocument屬性需要實現IDocumentPaginatorSource的類型實例,例如FixedDocument

0

正如devdigital(上文)所述,需要 IDocumentPaginatorSource類型的公共財產。

像這樣的東西可能:

private IDocumentPaginatorSource _fixedDocumentSequence; 

public IDocumentPaginatorSource FixedDocumentSequence 
{ 
    get { return _fixedDocumentSequence; } 
    set 
    { 
     if (_fixedDocumentSequence == value) return; 

     _fixedDocumentSequence = value; 
     OnPropertyChanged("FixedDocumentSequence"); 
    } 
} 

並在您的XAML只是綁定這個到DocumentViewerDocument屬性:

<Grid> 
    <DocumentViewer           
     Name="DocViewer" 
     Document="{Binding FixedDocumentSequence}"/>  
</Grid>