Xamarin.Forms Data Binding介绍

以下主要内容转自:http://www.jianshu.com/p/6cb786ce5b61

很多时候我们需要将某个View1 值的改变显示在另外一个View2 上,对View1的对应事件编码可实现我们想要的效果,如果只是想处理值的改变,可以通过连接两个View的对应属性即可,称为Data Binding。Data Binding在Model-View-ViewModel (MVVM)设计模式中起着重要作用。

Data Binding中设计两个概念Source 和 Target。当Source的值发生改变时Data Binding会自动将这个新的值更新到Target。对Target和Source有特殊要求,Target必须继承BindableProperty类(VisualElement通过继承Element继承了BindableObject,所以Xamarin.Forms中视图的大部分属性都是BindableProperty类型),Source必须实现INotifyPropertyChanged接口提供一种通知机制监听Source值的改变(BindableObject实现了INotifyPropertyChanged接口)。

简单的Data Binding使用

本示例以Slider的Value属性作Source,Label的Opacity属性作Target,实现拖动滑块影响Label透明度的效果。

代码方式设置Data Binding:

App类中代码如下:

        public App()
        {
            // The root page of your application
            MainPage = new NavigationPage(new OpacityBindingCodePage());

        }

新建OpacityBindingCodePage的XAML Page类代码如下:

    public partial class OpacityBindingCodePage : ContentPage
    {
        public OpacityBindingCodePage()
        {
            InitializeComponent();
            Label label = new Label
            {
                Text = "Opacity Binding Demo",
                FontSize = Device.GetNamedSize(NamedSize.Large, typeof(Label)),
                VerticalOptions = LayoutOptions.CenterAndExpand,
                HorizontalOptions = LayoutOptions.Center
            };
            Slider slider = new Slider
            {
                VerticalOptions = LayoutOptions.CenterAndExpand
            };
            // Set the binding context: target is Label; source is Slider.
            label.BindingContext = slider;
            // Bind the properties: target is Opacity; source is Value.
            label.SetBinding(Label.OpacityProperty, "Value");
            // Construct the page.
            Padding = new Thickness(10, 0);
            Content = new StackLayout
            {
                Children = { label, slider }
            };

        }

BindingContext 设置为要绑定到的对象

SetBinding 方法采用两个参数。 第一个参数指定绑定类型的信息。 第二个参数提供绑定内容或绑定方式的信息。

XAML方式设置Data Binding:

  <StackLayout>
       <Label Text="Opacity Binding Demo"
              FontSize="Large"
              VerticalOptions="CenterAndExpand"
              HorizontalOptions="Center"
              BindingContext="{x:Reference Name=slider}"
              Opacity="{Binding Path=Value}" />
       <Slider x:Name="slider" VerticalOptions="CenterAndExpand" />

  </StackLayout>

查看Label定义,BindingContext属性通过x:Reference指定,Opacity为目标属性通过Binding扩展标记的Path设置。Path不仅可以是Property也可以是SubProperty或 Indexer.如Content.Children[4].Value.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值