silverlight   发布时间:2022-05-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Silverlight中OneTime,OneWay,TwoWay及INotifyPropertyChanged 接口的理解大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

今天有时间把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" />
                <Text@L_801_2@ Text="{Binding ID,Mode=OneTimE}" Name="tbxID" Width="106" Height="27" ></Text@L_801_2@>
            </StackPanel>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                <TextBlock Height="23"  Name="textBlock2" Text="书名:" />
                <Text@L_801_2@ Text="{Binding title,Mode=OneWay}" Name="tbxtitle" Width="108" Height="27" ></Text@L_801_2@>
            </StackPanel>
            <StackPanel Orientation="Horizontal"  HorizontalAlignment="Center">
                <TextBlock Height="23"  Name="textBlock3" Text="价格:" VerticalAlignment="Top" />
                <Text@L_801_2@ Text="{Binding Price,Mode=TwoWay}" Name="tbxPrice" Width="108" Height="27"></Text@L_801_2@>
            </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)
        {
            message@L_801_2@.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 接口的理解所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。