Silverlight中OneTime,OneWay,TwoWay及INotifyPropertyChanged 接口的理解
2012-05-18 08:39
381 查看
今天有时间把Silverlight中OneTime,OneWay,TwoWay及INotifyPropertyChanged 接口的理解等数据绑定方面的东西理解学习了下!下面是我的笔记。
(一)前台代码:
(二)后台代码
(三)总结:
数据源--》控件 的更改就只能用OneWay,TwoWay并且需要实现INotifyPropertyChanged接口,而控件---》数据源,只有使用TwoWay方式才可以修改数据源(且不需要实现INotifyPropertyChanged接口)。然而直接更改控件值,虽然这样能更改控件Text属性值,但要进行类型转换,在这里都要转换为字符串类型。所以我们在操作是常用实体来接收参数,而不是直接去控件的值!
原文来源:http://blog.csdn.net/Joetao/article/details/5803716
(一)前台代码:
<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,OneWay,TwoWay三种方式都不能实现数据源更改控件值的场景 //当实现了INotifyPropertyChanged接口情况下,OneWay,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://blog.csdn.net/Joetao/article/details/5803716
相关文章推荐
- Silverlight中OneTime,OneWay,TwoWay及INotifyPropertyChanged 接口的理解
- Silverlight中OneTime,OneWay,TwoWay及INotifyPropertyChanged 接口的理解 .
- SilverLight学习笔记--Silverlight中INotifyPropertyChanged 接口在数据绑定中的使用
- silverlight数据绑定模式TwoWay,OneWay,OneTime的研究
- silverlight数据绑定模式TwoWay,OneWay,OneTime的研究
- [Silverlight入门系列]使用MVVM模式(7):ViewModel的INotifyPropertyChanged接口实现
- silverlight数据绑定模式TwoWay,OneWay,OneTime的研究
- Silverlight数据绑定oneTime,oneWay,twoWay
- silverlight数据绑定模式TwoWay,OneWay,OneTime的研究
- Silverlight/WPF数据绑定oneTime,oneWay,twoWay
- [Silverlight入门系列]使用MVVM模式(3):Model的INotifyPropertyChanged接口实现
- SilverLight 学习笔记--Silverlight中INotifyPropertyChanged 接口在数据绑定中的使用
- INotifyPropertyChanged接口在Silverlight中的简单使用
- silverlight数据绑定模式TwoWay,OneWay,OneTime的研究
- INotifyPropertyChanged接口的PropertyChanged 事件
- INotifyPropertyChanged 接口
- WindowPhone(SliverLight)中属性变化通知机制INotifyPropertyChanged 接口
- 不实现 INotifyPropertyChanged接口也能实现数据绑定
- 简单的INotifyPropertyChanged接口使用的示例类
- INotifyPropertyChanged 接口使用--update