如何设置ItemsSource?

时间:2010-05-05 23:28:58

标签: wpf visual-studio-2010

此对话框对我没有意义

http://img576.imageshack.us/img576/4223/50709706.gif

我很难找到合适的教程。大多数示例都不够详细,或通过代码执行,但我想尽可能利用IDE。

ItemsSourceDataContext之间的区别是什么?

我想将它绑定到一个列表作为初学者。我不需要SQL或数据库或任何花哨的东西。我在哪里申报我的名单?在MainWindow.xaml.cs?如何让它出现在该对话框中?

3 个答案:

答案 0 :(得分:5)

将“DataContext”视为绑定中“Source”的默认值。

创建绑定时,可以指定路径和源,如下所示(我将使用TextBox作为示例):

<TextBox Text="{Binding Path=Foo,Source={StaticResource Bar}}" />

所以我的TextBox.Text属性绑定到名为Bar的对象上的Foo属性(应用程序中的某个资源)。

但是,如果要将大量事物绑定到Bar上的属性,则将Bar设置为父容器的DataContext会更容易。没有Source的绑定将默认使用DataContext,DataContext将从父级流向子控件。所以:

<StackPanel DataContext="{StaticResource Bar}">
    <TextBox Text="{Binding Path=Foo}" />
    <TextBox Text="{Binding Path=Fizz}" />
    <TextBox Text="{Binding Path=Buzz}" />
</StackPanel>

所有TextBox仍然绑定到Bar上的属性,但他们没有明确地将其设置为Source。

让我们再看看你发布的对话框。它为ItemsSource绑定的“源”提供了几个选项。当您选择“DataContext”时,您告诉Visual Studio ItemsControl不需要知道源 - 它将从父容器的DataContext(甚至可能是Window本身)中获取它。

如果您选择了其他选项之一(ElementName,RelativeSource或StaticResource),那么您将为该ItemsControl显式设置绑定的源。

一旦你告诉它它绑定到DataContext,你需要进入对话框的“Path”部分并告诉它将哪个属性绑定到控件的项目。最后,标记看起来像这样(假设它是一个ListBox):

<ListBox ItemsSource="{Binding Path=Foos}" />

因此ListBox中的项目来自名为“Foos”的属性,该属性位于逻辑树中较高位置的DataContext中设置的对象(可能在Window本身上)。

答案 1 :(得分:1)

您很少需要使用控件之外的控件的数据上下文。设置DataContextDataContext = this;)的最常见用例是UserControl代码隐藏,以使UserControl中的所有控件都绑定到控件的属性。< / p>

当您使用ListBox时,设置ItemsSource就足够了,除非您正在做一些时髦的事情。

答案 2 :(得分:1)

这是一个非常好的演练:http://windowsclient.net/learn/video.aspx?v=315275

具体来说,您需要先设置DataContext,告诉它在哪里查找ItemsSource。最简单的方法是通过XAML在Window上设置它:

<Window.DataContext>
    <controllers:DownloadManager />
</Window.DataContext>