2010-10-21 78 views
0

看來在WPF中,我無法綁定到對象上的公共字段,而只能綁定到公共屬性。這是WPF的一個有意設計決定,還是我剛剛得到的語法錯誤?爲什麼我不能綁定到WPF中的類上的字段而不是綁定到屬性

下面是一個示例代碼段:

public class User 
{ 
    public string Username; 
    public string FullName; 
    public string DisplayName 
    { 
    get { return FullName; } 
    } 
} 

WPF段:

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="User Tool" > 
    <Window.Resources> 
    <DataTemplate x:Key="UserTemplate"> 
     <TextBlock Text="{Binding Path=DisplayName}" /> 
    </DataTemplate> 
    </Window.Resources> 
    <ListBox Name="listBoxUsers" ItemTemplate="{StaticResource UserTemplate}" ItemsSource="..." /> 
</Window> 

如果我更改綁定路徑用戶名或全名,什麼也不顯示在屏幕上。是否有一種替代語法綁定到字段,或僅綁定到屬性上?

+0

正如答案所說,它需要是一個財產。無論如何,這是「更好的面向對象程序設計」(信息隱藏等),使你的領域是私密的,並通過屬性暴露出來。另外它有助於編寫諸如DependencyProperties之類的東西,並實現INotifyPropertyChanged和其他好東西。 – 2010-10-21 17:06:21

+0

我正在使用的特定情況是使用FileHelpers庫來填充CSV中的項目,並且FileHelpers似乎不支持將引用字段填充到屬性中,這迫使我使用字段。對於更好的面向對象,你肯定是對的,在這種情況下它很笨拙。 – 2010-10-21 17:20:02

回答

6

字段是不是binding source spec

公共語言運行庫(CLR)的部分物品

您可以綁定到公共屬性, 子屬性,如以及任何公共語言運行庫(CLR) 對象的索引器, 。綁定引擎使用CLR 反射來獲取 屬性的值。或者,實現ICustomTypeDescriptor 或具有註冊的 TypeDescriptionProvider的對象 也可與 綁定引擎一起使用。

對於即將 如何實現一個類可以作爲一個 綁定源,請參閱 這個話題後來爲綁定源實現一個 類的更多信息。

動態對象

可以綁定到可用的屬性 和對象的索引器 實現 IDynamicMetaObjectProvider接口。 如果您可以訪問代碼 中的成員,您可以綁定它。例如,如果 動態對象允許您通過 someObjet.AProperty訪問代碼 ,您可以通過將綁定路徑設置爲012roxAProperty來綁定到 。

ADO.NET對象

您可以綁定到ADO.NET對象,例如 的數據表。ADO.NET DataView 實現IBindingList接口, ,它提供綁定引擎監聽的更改通知 。

XML對象

您可以綁定到和運行的XPath的一個XmlNode,XmlDocument的,或 的XmlElement查詢 。訪問作爲 標記中的綁定源的 XML數據的便捷方式是使用XmlDataProvider 對象。有關更多信息,請參見 如何:使用 XMLDataProvider和XPath查詢綁定到XML數據。

您也可以綁定到的XElement或 的XDocument,或與之結合的 查詢結果使用LINQ to XML對這些類型 的對象上運行。 使用LINQ to XML訪問XML數據的便捷方式 即標記 中的綁定源是使用ObjectDataProvider 對象。有關更多信息,請參見 如何:爲XML查詢結果綁定到XDocument,XElement或 LINQ。

DependencyObject的對象

您可以綁定到依賴屬性任何的DependencyObject 。有關 示例,請參閱如何:綁定兩個控件的 屬性。

3

看來它必須是一個屬性。

結合的來源可以是任何公共 財產,包括特性的其它控件 ,公共語言運行時 (CLR)的對象,XAML元素, ADO.NET數據集,XML片段,以及 等等。

Source

相關問題