2012-10-10 256 views
1

我用一個很簡單的樹形結構:樹結構

class Tree { } 
class Node : Tree { 
    public List <Tree> Children; 
} 
class Leave : Tree { 
    public string Content; 
} 

而且我想在WPF來顯示它 - RichTextBox中,結果看起來是這樣,但綁定到我的樹:

<FlowDocument> 
    <Section> 
    <Paragraph> 
     TEXT_FOOTER 
    </Paragraph> 
    </Section> 
</FlowDocument> 

凡樹只有葉子施展在一個段落的內容,並在部分節點顯示。

目前我編程解決這一點,但保持RTB與我的樹同步是一個硬的作品。 有沒有辦法將這種結構綁定到Box上,我知道Document-Property不是依賴屬性,所以沒有綁定。

我來過這個TextBox:Here,但我不舒服,如果我怎麼能綁定它,wpf似乎並不知道HierachicalDataTemplate在這一點上。 有什麼辦法讓wpf讓我的同步工作?

回答

1

我終於樣的解決了這個問題。問題是:WPF不給我使用數據綁定任何的可能性,所以我寫了,周圍用「onTextElementChanged」和text.Selection.Start.Parent到收到運行光標在 我相應的數據結構網絡化我想地圖中。存儲在父段的「標籤」屬性中。我知道這是一個相當醜陋的解決方案,但它是唯一一個正常工作的人。

如果有新的變化,我不得不concatinate多次運行,由於該RTB隨機分裂他們寫更改回。那就是爲什麼我拿這段落來存儲它。

其他方向可以通過聽的PropertyChanged事件,就像WPF呈現給你解決。

最大的仍無法解決問題是RTB的撤銷功能。因爲我必須構建更復雜的數據結構,所以我使用了一些UserControls和InlineUIContainer。如果您刪除其中的一個(例如通過按「entf」),程序將崩潰並出現StackOverflowException。這是WPF中的「未記錄的功能」或錯誤,而微軟不打算修復它。