Silverlight中OneTime,OneWay,TwoWay及INotifyPropertyChanged 接口的理解

Silverlight中OneTime,OneWay,TwoWay及INotifyPropertyChanged 接口的理解,第1张

概述今天有时间把Silverlight中OneTime,OneWay,TwoWay及INotifyPropertyChanged 接口理解等数据绑定方面的东西理解学习了下!下面是我的笔记。 (一)前台代码: <Grid x:Name="LayoutRoot" Background="White"> <StackPanel> <StackPanel Orie 今天有时间把Silverlight中OneTime,OneWay,TwoWay及INotifyPropertyChanged 接口的理解等数据绑定方面的东西理解学习了下!下面是我的笔记。

(一)前台代码:

<GrID x:name="LayoutRoot" Background="White">        <StackPanel>            <StackPanel OrIEntation="Horizontal"   HorizontalAlignment="Center">                <TextBlock Height="23" name="textBlock1" Text="编号" WIDth="34" />                <TextBox Text="{Binding ID,Mode=OneTime}" name="tbxID" WIDth="106" Height="27" ></TextBox>            </StackPanel>            <StackPanel OrIEntation="Horizontal" HorizontalAlignment="Center">                <TextBlock Height="23"  name="textBlock2" Text="书名:" />                <TextBox Text="{Binding Title,Mode=OneWay}" name="tbxTitle" WIDth="108" Height="27" ></TextBox>            </StackPanel>            <StackPanel OrIEntation="Horizontal"  HorizontalAlignment="Center">                <TextBlock Height="23"  name="textBlock3" Text="价格:" VerticalAlignment="top" />                <TextBox Text="{Binding Price,Mode=TwoWay}" name="tbxPrice" WIDth="108" Height="27"></TextBox>            </StackPanel>                       <StackPanel>                <button name="Mybutton" Content="通过数据源修改控件的值" Click="Mybutton_Click" WIDth="140" Height="27"></button>                <button Content="直接修改控件的值" Height="23" name="button1" WIDth="139" Click="button1_Click"  />                <button Content="通过控件修改数据源的值" Height="23"  name="button2"  WIDth="140" Click="button2_Click" />            </StackPanel>            </StackPanel>            </GrID>

(二)后台代码

 

 public partial class MainPage : UserControl    {        Book book = new Book();        public MainPage()        {            InitializeComponent();            book.ID = 0;            book.Title = "ASP.NET 开发手册";            book.Price = 40;            tbxID.DataContext = book;            tbxTitle.DataContext = book;            tbxPrice.DataContext = book;                  }        //通过修改数据源修改控件的值        //如果在没有实现INotifyPropertyChanged接口情况下,OneTime,TwoWay三种方式都不能实现数据源更改控件值的场景        //当实现了INotifyPropertyChanged接口情况下,TwoWay能实现数据源更改控件值的场景,而OneTime是不能实现的        //因为OneTime是初始化绑定后,控件和数据源就没关系了的        //结论:数据源--》控件 的更改就只能用OneWay,TwoWay并且需要实现INotifyPropertyChanged接口        private voID Mybutton_Click(object sender,RoutedEventArgs e)        {            book.ID = 100;            book.Price = 50;            book.Title = "SL开发手册";                    }                        //通过控件修改数据源的值        //因为ID是OneTime,Title用的是OneWay无论Book是否继承了INotifyPropertyChanged接口,都无法通过修改控件tbxID,tbxTitle的值来修改数据源的值的        //对于Pirce使用了TwoWay方式,无论Book是否继承了INotifyPropertyChanged接口,都可以通过修改tbxPrice的值修改数据源的值        //因为当目标和源有一个发生变化时,TwoWay 绑定既更新目标也更新源        //结论:控件---》数据源,只有使用TwoWay方式才可以修改数据源(且不需要实现INotifyPropertyChanged接口)        private voID button2_Click(object sender,RoutedEventArgs e)        {            MessageBox.Show(book.ID.ToString() + " " + book.Title.ToString() + " " + book.Price.ToString());        }        //直接修改控件的值        //虽然这样能更改控件Text属性值,但要进行类型转换,在这里都要转换为字符串类型        private voID button1_Click(object sender,RoutedEventArgs e)        {            tbxID.Text = "100";            tbxPrice.Text = "50";            tbxTitle.Text = "SL开发手册";        }    }    public class Book:INotifyPropertyChanged    {        private int _ID;        public int ID        {            get { return _ID; }            set            {                _ID = value;               NotifyPropertyChange("ID");            }        }        private string _Title;        public string Title        {            get { return _Title; }            set            {                 _Title = value;               NotifyPropertyChange("Title");            }        }        private double _price;        public double Price        {            get { return _price; }            set            {                _price = value;               NotifyPropertyChange("Price");            }        }        public event PropertyChangedEventHandler PropertyChanged;        private voID NotifyPropertyChange(string propertyname)        {            if (PropertyChanged != null)            {                PropertyChanged(this,new PropertyChangedEventArgs(propertyname));            }        }    }


 

(三)总结:

数据源--》控件 的更改就只能用OneWay,TwoWay并且需要实现INotifyPropertyChanged接口,而控件---》数据源,只有使用TwoWay方式才可以修改数据源(且不需要实现INotifyPropertyChanged接口)。然而直接更改控件值,虽然这样能更改控件Text属性值,但要进行类型转换,在这里都要转换为字符串类型。所以我们在 *** 作是常用实体来接收参数,而不是直接去控件的值!

原文来源:http://www.voidcn.com/article/p-wegopnrh-bax.html

总结

以上是内存溢出为你收集整理的Silverlight中OneTime,OneWay,TwoWay及INotifyPropertyChanged 接口的理解全部内容,希望文章能够帮你解决Silverlight中OneTime,OneWay,TwoWay及INotifyPropertyChanged 接口的理解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1068114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存