2

在我当前的项目中,我对数据绑定没有什么问题。我有一个要绑定到 ListBox 的 ObservableCollection。

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

...之后...

geoListBox.ItemsSource = geoList;

这段代码工作正常。列表框有一个数据模板,一切看起来都很完美。

但我不想使用 C# 代码进行绑定。我想在 XAML 代码中进行绑定。我正在寻找几天,但我不明白。这是两行 C# 代码,但要在 XAML 中存档,如果不为我的集合创建自己的类或添加 DataProvider 或资源或其他任何东西,似乎是不可能的。

没有简单的方法吗?

4

3 回答 3

4

您所要做的就是公开集合并绑定到它。例如,如果您将其公开为:

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

您将能够绑定到它:

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

“技巧”是确保DataContextListBox是公开GeoList属性的类。

于 2009-02-24T15:24:16.060 回答
1

另一种好方法是将 geoList 实例化为资源

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

然后你有

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

当然,这仅适用于数据仅与视图相关的情况。如果这与模型或模型视图有关,则使用 DataContext 并绑定到它的属性。

于 2009-02-24T19:06:08.803 回答
0

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

进一步说明,如果您不希望将 DataContext 设置为列表,您还可以使用另一种形式的绑定检索该属性:

确保您的根控件有一个名称,即“根”

{Binding ElementName=Root, Path=GeoList}
于 2009-02-24T16:02:47.400 回答