【问题标题】:Silverlight - relative DataContext in XAML?Silverlight - XAML 中的相对 DataContext?
【发布时间】:2010-10-11 08:02:19
【问题描述】:

在 Silverlight XAML 中,我想我刚刚意识到嵌套容器上的 DataContext 声明与父容器的 DataContext 相关。请大家确认一下。

如果是这样,那么让我问这个问题:在子 XAML 容器元素(即 StackPanel)上,如果出现以下情况,您将如何跳出相关的 DataContext 树并从更高的位置开始,或者一起启动不同的 DataContext您想将 StackPanel 上的 DataContext 设置为不同的根上下文吗?

也就是说,如何让子DataContext脱离父DataContext?

(寻找 XAML 代码解决方案/语法)

【问题讨论】:

    标签: xaml silverlight data-binding datacontext


    【解决方案1】:

    您的第一个假设是正确的。 DataContext 是一种由 嵌套元素。

    在子 XAML 容器元素上,您始终可以重新定义 DataContext 是什么。

    请看下面的例子:

    <UserControl.Resources> <local:Customer x:Key="Cust"> <local:Supplier x:Key="Supp"> </UserControl.Resources> <Grid x:Name="LayoutRoot" Background="White" DataContext="{StaticResource Cust}"> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <StackPanel Orientation="Horizontal" Grid.Row="0"> <TextBlock Text="Customer Name: " /> <TextBox Text="{Binding Path=Name}"/> </StackPanel> <StackPanel Orientation="Horizontal" Grid.Row="1" DataContext="{StaticResource Supp}"> <TextBlock Text="Supplier Name: " /> <TextBox Text="{Binding Path=Name}"/> <TextBlock Text=" Telephone: " /> <TextBox Text="{Binding Path=Telephone}"/> </StackPanel> </Grid>

    以下是上述示例的“模型”类:

    public class Customer { public Customer() { Name = "Customer name"; Address = "Customer address"; } public string Name { get; set; } public string Address { get; set; } } public class Supplier { public Supplier() { Name = "Supplier name"; Address = "Supplier address"; Telephone = "(555)555-5555"; } public string Name { get; set; } public string Address { get; set; } public string Telephone { get; set; } }

    【讨论】:

    • 您的示例在 XAML 中创建对象。我的对象在构造函数中实例化。因此,在每个 XAML 中使用什么来指向对象,因为它们不在 XAML 的 UserControl.Respources 中。
    • 另外,我需要持久绑定。需要这样的东西:
    • 如果您不想使用 XAML 选项,您可以创建一个将其他类的实例公开为公共属性的类。然后将此“presenter”绑定到“LayoutRoot”并将其属性用作其他元素的源。
    • this.Resource[".."] 允许访问(在代码中)在资源中定义的任何命名对象。如果可用,您还可以将元素的 Source 绑定到当前 DataContext 的属性
    • 如何将 LayoutRoot 根绑定到演示者 FROM XAML?我知道如何在代码中设置它,但想了解如何让 XAML 引用演示者上下文。 silverlight.net/forums/t/77409.aspx 了解更多信息。
    【解决方案2】:

    查看此博客,它详细介绍了一个代理类,用于从 xaml 中完成您需要的所有工作。

    [http://weblogs.asp.net/dwahlin/archive/2009/08/20/creating-a-silverlight-datacontext-proxy-to-simplify-data-binding-in-nested-controls.aspx][1]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-11
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 2014-03-09
      相关资源
      最近更新 更多