2010-10-15 10 views
1

我目前正在嘗試將帶有幾個文本框的wpf表單轉換爲RichTextBoxes,以便實現更好的編輯功能。原始文本框全部鏈接到底層存儲類,在導航到頁面時使用數據綁定到數據上下文。使用WPF中的RichTextBoxes訪問用於數據綁定的類屬性

public class Storage 
{ 
    public String IntroFormText { get; set; } 
    public String MainFormText { get; set; } 
} 

public partial class DataEntryPage : BasePage 
{ 
    private Storage _storage { get; set; } 

    public override NavigatingTo(object data, object savedState) 
    { 
    DataContext = _storage; 
    } 

} 

最初,文本框中的綁定已經通過數據上下文簡單地通過並鏈接到Storage類,如下所示。

<TextBox 
    Name="IntroText" 
    Text="{Binding IntroFormText} 
    SpellCheck.IsEnabled="True" /> 

這會自動通過數據綁定鏈接到_storage.IntroFormText。爲了允許RichTextBoxes中的雙向數據綁定,使用了基於this文章中的想法的自定義實現。嘗試將數據綁定鏈接到Storage類中的屬性時出現問題。隨着RichTextBoxes以下聲明使用:

<Utils:BindableRichTextBox 
    x:Name="IntroductionText" 
    Document="{Binding {Path=IntroFormText, ElementName=dataEntryPage, Mode=TwoWay, Converter={StaticResource StringToXamlConverter}}" 
    SpellCheck.IsEnabled="True" /> 

的想法是那麼超載getter和setter相關的屬性,添加以下行DataEntryPage類。

private static readonly DependencyProperty introProperty = DependencyProperty.Register("IntroFormText", typeof(string), typeof(Storage)); 

public string IntroFormText 
{ 
    get { return (string) GetValue(DocumentProperty); } 
    set { SetValue(DocumentProperty, value); } 
} 

我雖然有這裏的問題是,它需要被連接,物業駐留在存儲類,而不是在DataEntryPage類。有沒有辦法讓DependencyProperty有效地綁定到存儲類屬性(如TextBox自動執行),還是我需要爲這種行爲寫入某種被黑客入侵的替代品?我想我需要重載DataEntryPage類的內的Storage.Properties類的getters/setters以允許它正確指向DependencyProperty?

由於系統的性質,不幸的是刪除數據上下文綁定系統並不是一個真正的選擇(加上我沒有權限更改設計!)。但願但是,這對於遇到這個問題的人來說可能是有意義的!

回答

1

如果您已經在使用將Document屬性設置爲DependencyProperty的控件,則不需要爲Binding源聲明另一個。只有綁定的目標(本例中爲文檔)需要是DP。如果控件編寫正確,則應該能夠使用與TextBox相同的Binding,假定該字符串的內容將爲您的StringToXamlConverter提供適當的輸入以生成FlowDocument。

我希望這不是你的實際代碼,但如果是這樣,你的DP聲明(在這種情況下你不需要)有很多錯誤。移民需要有一個非常具體的格式,以使他們的申報能夠正常工作。通常最好使用代碼片段爲您生成它,特別是如果您對所有部件之間的關係沒有深入瞭解的話。

+0

這確實不是我的確切代碼,更多的是一個更大的代碼庫的摘要/子集。最後,經過進一步討論後,證明離開DataBindings更簡單。我看到你從哪裏來的DependencyProperty的東西,我認爲在這一天結束的時候,我沒有足夠的理解來真正使用這個項目。這個想法雖然引起了我的興趣,但它肯定是我將來會更加關注的東西!定製DP材料的一篇體面的文章將很好找到,但供將來參考! :) – Smallgods 2010-10-18 09:24:17

+0

MSDN文章(http://msdn.microsoft.com/en-us/library/ms752914.aspx)實際上是一個很好的概述。我會堅持通過「設置屬性值」開始的前幾個部分。 – 2010-10-18 13:24:01