此对话框对我没有意义
http://img576.imageshack.us/img576/4223/50709706.gif
我很难找到合适的教程。大多数示例都不够详细,或通过代码执行,但我想尽可能利用IDE。
ItemsSource
和DataContext
之间的区别是什么?
我想将它绑定到一个列表作为初学者。我不需要SQL或数据库或任何花哨的东西。我在哪里申报我的名单?在MainWindow.xaml.cs
?如何让它出现在该对话框中?
答案 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)
您很少需要使用控件之外的控件的数据上下文。设置DataContext
(DataContext = 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>