我目前正在嘗試將帶有幾個文本框的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?
由於系統的性質,不幸的是刪除數據上下文綁定系統並不是一個真正的選擇(加上我沒有權限更改設計!)。但願但是,這對於遇到這個問題的人來說可能是有意義的!
這確實不是我的確切代碼,更多的是一個更大的代碼庫的摘要/子集。最後,經過進一步討論後,證明離開DataBindings更簡單。我看到你從哪裏來的DependencyProperty的東西,我認爲在這一天結束的時候,我沒有足夠的理解來真正使用這個項目。這個想法雖然引起了我的興趣,但它肯定是我將來會更加關注的東西!定製DP材料的一篇體面的文章將很好找到,但供將來參考! :) – Smallgods 2010-10-18 09:24:17
MSDN文章(http://msdn.microsoft.com/en-us/library/ms752914.aspx)實際上是一個很好的概述。我會堅持通過「設置屬性值」開始的前幾個部分。 – 2010-10-18 13:24:01