Windows Phone 动态绑定小技巧

Windows Phone 采用了结合MVP和MVC模式的MVVM模式,要求数据进行动态绑定显示,同时将几乎所有操作改为异步方式,以增强用户体验和流畅度,以下是我在开发Windows Phone程序时进行动态绑定的一些经验。


1.集合要用ObservableCollection,该类位于System.Collections.ObjectModel命名空间中,和List有很多相似的地方

初始化:

static ObservableCollection<SongItem> SongData = new ObservableCollection<SongItem>();


2.类的写法:

public class SongItem : INotifyPropertyChanged  //首先要继承INotifyPropertyChanged接口,位于System.ComponentModel命名空间
    {
        public event PropertyChangedEventHandler PropertyChanged;  //异步的一个通知事件
        private void NotifyPropertyChanged(String propertyName)  //实习刚继承的接口中的方法
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (null != handler)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));  //向UI发送值改变的通知
            }
        }
        private string _Title; //用于存储值的私有变量 
        public string Title //属性 
        { 
            get 
            { 
                return _Title; 
            } 
            set 
            { 
                if (value != _Title) 
                { 
                    _Title = value; 
                    NotifyPropertyChanged("Title"); //这一行必须有,用户向UI通知变化的字段名 
                } 
            } 
        } 
    }

有人问我类里面的属性为什么必须这样写,原因如下:为了set里调用NotifyPropertyChanged方法,get也不能使用自动的方式,所以这样写(我其实也是从Windows Phone工程自带的例子里看的),说白了,其实就是为了能做到UI能实时获得集合元素中的值改变,从而动态更新显示内容。


3.在xaml里,需要绑定的值,例如TextBlock的Text就可以直接写成

    <TextBlock Text={"Binding Title"} />
这样就可以获得相应的DataSource里每一行的Title字段的值,如果找不到也不会报错

前提:在后台代码中要事先声明好容器的数据源

    PlayList.ItemsSource = SongData;


4.绑定技巧:

绑定值不但可以是String,int,bool等这种基本的类型,一个类,UI属性(Visibility,Color等)都可以,UI控件的属性值也可以通过动态绑定进行改变,比如Foreground,直接返回string类型的Red,White都是可以的

类里可以这样写

private Visibility _detailvis;
        public Visibility detailvis
        {
            get
            {
                return _detailvis;
            }
            set
            {
                if (value != _detailvis)
                    _detailvis = value;
                NotifyPropertyChanged("detailvis");
            }
        }

xaml里只需要写成
     <TextBlock Visibility="{Binding detailvis}" />
即可实现可见性的绑定

基本控件都是有Tag这个属性的,又因为Tag的类型是Object,所以可以接受所有的类型,绑定一个对象,或者一串有用的数据,在页面跳转等操作时非常有用,当后台使用时,只需用如下操作:

private void StackPanel_Tap_1(object sender, System.Windows.Input.GestureEventArgs e)
        {
            var s = (StackPanel)sender;
            string uri = "/BookDetail.xaml?id=" + s.Tag.ToString();
            this.NavigationService.Navigate(new Uri(uri, UriKind.Relative));
        }
将sender转换为该控件的类型,即可正确地获得其中的Tag属性,再转换成你需要的类型即可

Windows Phone 的绑定做的还是非常灵活的,能有效地使用绑定,将对程序的用户体验有显著的提高!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值