2012-02-12 55 views
1

如果我不向String屬性添加顯式訪問器,那麼數據綁定不起作用。這是爲什麼? 下面是一個簡單的例子,其中一個文本框被連接到一個String屬性。爲什麼數據綁定源需要一個明確的getter?

MainPage.xaml中:

<Grid Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
    <TextBlock Text="{Binding Message} /> 
</Grid> 

而後面的代碼:

public String Message; 

public MainPage() 
{ 
    InitializeComponent(); 
    Message = "Hello World"; 
    DataContext = this; 
} 

這不起作用,文本框爲空。

但是,添加屬性訪問器;

public String Message { get; set; }; 

現在它的工作。

我看不到這在MSDN Data Binding解釋。有人可以解釋嗎?不要屬性有一個implict set/get訪問器?即便如此,爲什麼數據綁定只能訪問該屬性?

感謝,

回答

3
public String Message; 

這是一個字段,而不是屬性。添加getters和setter會創建一個自動屬性。 只有屬性可以綁定到。

+0

@Slaks,@devdigital和@Matti_Virkkunen:你們都有相同的答案,但事實證明都是不太正確的..大家都明確了我一個字段和屬性之間的區別 - 我並沒有意識到這一點。這使我得到了正確的答案:當涉及路徑時,綁定只能用於屬性**,否則它可以直接訪問字段。例如:上面是'DataContext = Message;'然後''確實有效!所以使用路徑需要訪問器。 [MSDN](http://msdn.microsoft.com/en-us/library/system.windows.data.binding.source(V = VS.95)的.aspx) – peterept 2012-02-13 09:27:12

2

{ get; set; }是什麼使編譯器生成的隱含存取。如果你不這樣做,你根本沒有創建一個屬性,而只是一個簡單的領域。

我沒有把XAML那麼多,所以我不能肯定地說,但也許它只是不支持綁定到平原領域。

2

public String Message;是一個字段,而不是一個屬性。
數據綁定僅適用於屬性。

相關問題