2009-02-24 80 views
2

我在當前項目中使用數據綁定的問題很少。 我有一個ObservableCollection我想要綁定到一個ListBox。WPF在XAML中的數據綁定

public ObservableCollection<GeoDataContainer> geoList = new ObservableCollection<GeoDataContainer>(); 

...後...

geoListBox.ItemsSource = geoList; 

此代碼工作正常。列表框有一個數據模板,一切看起來都很完美。

但我不想使用C#代碼進行綁定。我想在XAML代碼中進行綁定。 我正在尋找天,但我不明白。這些是C#代碼的兩行代碼,但要將其歸檔到XAML中,似乎不可能爲我的集合創建自己的類或添加DataProvider或資源等。

有沒有簡單的方法來做到這一點?

回答

1

另一個好辦法就是實例geoList作爲一種資源

<WindowResources> 
    <l:GeoCollection x:Key="geoList"/> 
</WindowResources> 

然後,你必須

GeoCollection geoList = FindResource("geoList") as GeoCollection; 

當然,這是一個情況下,當數據與唯一的視圖。如果這與模型或模型視圖相關,則使用DataContext並綁定到它的屬性。

4

所有你需要做的就是暴露集合並綁定到它。例如,如果將其公開爲:

public ICollection<GeoDataContainer> GeoList 
{ 
    get { return geoList; } 
} 

您將能夠綁定到它:

<ListBox ItemsSource="{Binding GeoList}"/> 

的「絕招」是,以確保該ListBoxDataContext是類公開GeoList屬性。

0

肯特的建議是要走的路...

在進一步注意,如果您不希望您的DataContext設置到列表中,你也可以用檢索的屬性的結合另一種形式:

確保你的根控制都有一個名字,即「根」

{Binding ElementName=Root, Path=GeoList} 
+0

我必須承認我沒有得到它的工作。 我嘗試了所有你的建議,程序確實編譯。但我得到的只是我的Listbox中的一個空白條目。我使用了ObservableCollection,因爲每次添加對象時,Listbox都會刷新。但它沒有發生。 – TalkingCode 2009-02-25 09:24:39