如何在Silverlight中进行简单的绑定?

时间:2009-09-01 15:13:32

标签: silverlight xaml class binding

我知道Silverlight 3.0有绑定但只想要一个简单的例子来说明如何使用它来读取类中的属性。
我有一个名为Appointment的类,它作为一个名为Location的String属性:

    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文件加载,这可能是绑定示例似乎不起作用的一个因素,因为有不同的XAML文件相同的Appointment.Location数据需要应用。

3 个答案:

答案 0 :(得分:3)

您有两种选择。

如果“Appointment”类可用作控件或Window的DataContext,则可以执行以下操作:

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

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

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

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

答案 1 :(得分:1)

你需要代码中的东西,除非你想在资源中声明Appointment的实例并绑定到那个但我怀疑你想要的是什么。

您需要将Text属性绑定到Property Path“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控件。

答案 2 :(得分:0)

如果我正确阅读,你需要创建一个Appointment实例,将控件的DataContext设置为该实例并修改你的绑定只需说:Text =“{Binding Location}”

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