【问题标题】:How to do simple Binding in Silverlight?如何在 Silverlight 中进行简单绑定?
【发布时间】:2010-11-24 16:23:25
【问题描述】:

我了解 Silverlight 3.0 具有绑定功能,但只是想要一个简单的示例来说明如何使用它从类中读取属性。
我有一个名为 Appointment 的类,它是一个名为 Location 的字符串属性:

    Public Property Location() As String
        Get
            Return _Location
        End Get
        Set(ByVal Value As String)
            _Location = Value
        End Set
    End Property

当然,将 _Location 的私有声明作为字符串。
我想要一个 XAML 元素绑定到此属性以在 TextElement 中显示它,但它必须是 XAML 而不是代码,例如我想要这样的东西:

<TextBlock Text="{Binding Appointment.Location}"/> 

我需要做什么才能让它工作?
它必须是 Silverlight 3.0 解决方案,因为某些 WPF 功能不存在,例如我习惯使用的 DynamicResource。


只是补充一点,我的 XAML 是从单独的 XAML 文件加载的,这可能是绑定示例似乎不起作用的一个因素,因为相同的 Appointment.Location 数据需要不同的 XAML 文件应用。

【问题讨论】:

  • 看起来这里的答案非常适合让它工作,只是 DataContext 部分使它工作,直到现在才知道如何做到这一点!
  • 我将需要多个 DataContexts 来绑定到几个类,但应该能够解决这个问题 - 将它们集中到一个类中以绑定到 XAML

标签: silverlight xaml class binding


【解决方案1】:

你有两个选择。

如果“Appointment”类可以作为控件或Window的DataContext,你可以这样做:

<TextBlock Text="{Binding Location}" />

但是,如果“Appointment”是您当前 DataContext 的一个属性,则您需要一个更复杂的绑定路径:

<TextBlock Text="{Binding Path=Appointment.Location}" />

完整的详细信息记录在 MSDN 中的 Binding Declarations page 下。如果这些都不起作用,请确保正确设置了 DataContext。

【讨论】:

  • 谢谢你,至少我现在有一些东西可以工作,习惯了 DynamicResources 但它更强大,在我的 XAML 中也更整洁
【解决方案2】:

您需要代码中的某些内容,除非您想在资源中声明 Appointment 的实例并绑定到该实例,但我怀疑这就是您想要的。

您需要将 Text 属性绑定到属性路径“Location”,然后将包含 XAML 的 DataContext 分配给 Appointment 的实例:-

<Grid x:Name="LayoutRoot" Background="White">
   <TextBlock Text="{Binding Location}" />
</Grid>

然后在控件的加载事件中:-

 void Page_Loaded(object sender, RoutedEventArgs e)
 {
    this.DataContext = new Appointment() { Location = "SomePlace" };
 }

请注意,在这种情况下,我使用的是默认的 Page 控件。

【讨论】:

  • 实际上,这让我意识到我在类被实例化之前分配了 DataContext,如果我在加载 XAML 之后将 Appointment 类分配为 DataContext,它就可以工作!
【解决方案3】:

如果我没看错,您需要创建一个 Appointment 实例,将控件的 DataContext 设置为该实例,并将您的绑定修改为:Text="{Binding Location}"

另外,考虑在 Appointment 类上实现 INotifyPropertyChanged 以允许数据类通知 UI 属性值更改。

【讨论】:

  • 这听起来像是我需要的——如何将 XAML 中的 DataContext 设置为类的实例?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-29
  • 2011-07-23
  • 2011-10-04
  • 2013-07-07
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
相关资源
最近更新 更多