2009-02-24 96 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