如何在我的资源文件或Window.Resource标记下定义DataContext?

时间:2011-12-27 21:47:04

标签: wpf resources datacontext

我有这个约束力:

<Window x:Name="_local">

    <TextBox x:Name="txtVendorName" DataContext="{Binding ElementName=_this, Path=VendorObject}"  Width="200" Height="50" BorderBrush="Black" Text="{Binding Path=VendorName}" />

如果我有50个文本框和标签需要绑定,我是否需要为所有人设置DataContext?

有没有办法可以集中这个DataContext,只为我的对象定义文本/内容?

我不想将DatContext定义到我的网格。那么如何在我的?

中定义DataContext
<Window.Resources></Window.Resources>

1 个答案:

答案 0 :(得分:0)

如果我正确猜测您的实际要求,那么您想要的是所有50个标签和文本块应绑定到VendorObject来自_this对象的数据上下文。虽然我无法猜出_this对象是什么。

DataContext是一个Inherited Dependency Property (IDP)他们的意思是当一个可视父级用数据上下文设置时,它的数据上下文被那个视觉下面的所有孩子获得。

因此,如果您在窗口中放置一些Panel并使用绑定DataContext="{Binding ElementName=_this, Path=VendorObject}"设置其数据上下文一次,然后将所有这些50-100个文本块和标签放在该面板下,那么它们将自动获取vendor-object作为数据上下文。

所以

  <StackPanel DataContext="{Binding ElementName=_this, Path=VendorObject}">
      <TextBlock Text="{Binding Path=VendorName}" />
      <TextBlock Text="{Binding Path=VendorId}" />
      <TextBlock Text="{Binding Path=VendorLocation}" />
      .... <!--Put all the 50 UI items here to use same data context -->
  </StackPanel>

我希望我猜对了你需要的东西。

现在回答你的下一个问题,


  

那么如何在我的

中定义DataContext
  <Window.Resources></Window.Resources>

你不能。但是你可以创建一个VendorObject类的实例并给它一个资源Key,但这只是一个糟糕的设计。