2010-09-29 59 views
3

我有WPF中綁定的一個問題。我發現了一個奇怪的問題。我有從DbConnectionStringBuilder繼承的類ConfiugrationStringBuilder。當我水木清華這樣奇怪的WPF結合

public class ConfiugrationStringBuilder : DbConnectionStringBuilder 
{ 
    public string Directory { get;set; } 
} 

ConfiugrationStringBuilder builder = new ConfiugrationStringBuilder(connStr); 

builder.Directory = "d:\dir"; //my property 

txtBox.DataContext = builder; 

再加入結合的XAML txtBox

<TextBox Name="txtBox" Text="{Binding Path=Directory}"></TextBox> 

的問題是,上面的代碼不起作用。我不能綁定到我的類屬性,但我可以綁定到基地DbConnectionStringBuilder的公共性的判定。

而且最有趣的事情是,當我自DbConnectionStringBuilder

刪除繼承,所以我的代碼看起來像這樣

public class ConfiugrationStringBuilder 
{ 
    public string Directory { get;set; } 
} 

在這種情況下,上述的結合效果很好。我無法找到關於這種情況的任何信息,爲什麼在這種情況下綁定不起作用?有人可以解釋這種行爲嗎?

當我在寫我想調查什麼是一個問題qusetion。並發現DbConnectionStringBuilder有索引,所以當嘗試綁定到Path=Directory在後臺它builder["Directory"]builder.Directory。無論如何,有人可以告訴我爲什麼這樣做嗎?

回答

3

這是綁定'Magic」的一部分,以支持主從方案(請參閱here完整的說明)。基本上,作爲對象實現IEnumerable,一個TextBox會嘗試綁定到,因爲它會集合 - 這意味着它會尋找當前項目。

要解決此問題 - 我可能會考慮包裝DBConnectionStringBuilder,而不是從它繼承(另外,您將更好地堅持構造over繼承)。