zoukankan      html  css  js  c++  java
  • Silverlight开发历程—(数据格式转换)

          通常在一些情况下,我们需要把绑定到UI的数据做一些格式的特定转换,例如转换时间格式。而在这个情况下就需要使用Silverlight的数据转换功能(当然用其它方法也可以我们在这里只是体现Silverlight数据转换功能),在Silverlight中任何绑定数据都可以实现数据转换。要实现数据转换首先要创建数据转换类,然后要继承IValueConverter接口并实现接口的Convert和ConvertBack方法,当数据源传递数据到目标时调用Convert方法反之则调用ConvertBack方法。ConvertBack方法不可省略,下面我们来看IValueConverter接口的两个方法的定义

    Convert:

    /// <summary>
            /// 摘要:
            //    在将数据源传递到UI时进行数据修改。
            /// </summary>
            /// <param name="value">正传到目标的数据源</param>
            /// <param name="targetType">目标依赖项属性需要的数据的System.Type</param>
            /// <param name="parameter">要在转换器逻辑中使用的可选参数</param>
            /// <param name="culture">转换的区域性</param>
            /// <returns> 传递到目标依赖的项属性的值</returns>
            object Convert(object value, Type targetType, object parameter, CultureInfo culture);


    然后是ConvertBack:

     /// <summary>
            /// 摘要:
            ///     将目标数据传到源对象之前对值进行修改此方法
            ///     仅在System.Windows.Data.BindingMode.TwoWay绑定中调用
            /// </summary>
            /// <param name="value">正传到源的目标数据</param>
            /// <param name="targetType">源对象需要的数据的System.Type</param>
            /// <param name="parameter">要在转换器逻辑中使用的可选参数</param>
            /// <param name="culture">转换的区域性</param>
            /// <returns> 要传到源对象的值</returns>
            object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture);


    下面是 例子,首先创建一个Convert类,然后让这个类继承自IValueConverter接口,要用IValueConverter接口要引用System.Windows.Data命名空间。

    代码如下:

    public class Converter : IValueConverter
        {
            #region IValueConerter成员
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                return DateTime.Parse(value.ToString()).ToString("yyyy年MM月dd日");
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
            #endregion
        }


    这个Convert只是实现了时间的转换将时间转换成yyyy年MM月dd日的形式,例子很简单只是为了体现Silverlight的数据转换功能。

    然后要在XAML里面加入myConvert作用前要在UserControl中添加命名空间xmlns:my="clr-namespace:Propject1.s02",添加的命名空间中Propject1是我的项目的名字s02是我的Converter类所在的文件夹的namespace,所以朋友们需要把Propject1.s02换成自己的项目解决方案名字,一定要引用到Convert所在目录那一级哦。

    前台界面如下:

    XAML

    <StackPanel x:Name="LayoutRoot" Background="White">
            <StackPanel.Resources>
                <!--引用对象-->
                <my:Converter x:Key="myConvert"/>
            </StackPanel.Resources>
            <sdk:DatePicker x:Name="datep" Margin="5" FontSize="15" Width="200" Height="30"  />
            <TextBlock x:Name="txb_Date"  Width="200" FontSize="15" Height="30" Text="{Binding Date,Mode=TwoWay,Converter={StaticResource myConvert}}" />
        </StackPanel>


    创建Book_Convert 代码:

     public class Book_Convert : INotifyPropertyChanged
        {
            private string _date;
            /// <summary>
            /// 日期
            /// </summary>
            public string Date
            {
                get { return _date; }
                set
                {
                    _date = value;
                    NotifyProperyChanged("Date");
                }
            }
            public event PropertyChangedEventHandler PropertyChanged;
            private void NotifyProperyChanged(string PropertyName)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
                }
            }
        }


    UI后台:

     Book_Convert convert = new Book_Convert();
            public DataConvert()
            {
                InitializeComponent();
                datep.SelectedDateChanged += new EventHandler<SelectionChangedEventArgs>(datep_SelectedDateChanged);
                convert.Date = DateTime.Now.ToString();
                txb_Date.DataContext = convert;
            }
    
            void datep_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
            {
                convert.Date = datep.SelectedDate.ToString();
            }


    运行如图所示:

    未使用Convert前:

    然后使用Convert后:

    例子是很简单,大家可以变通一下IValueConverter接口中不是有System.Type参数吗。大家可以根据这个类型来判断是要进行什么转换,然后再调用转换方法就行了。

  • 相关阅读:
    JS处理日期&字符串格式相互转换
    Ajax 原理过程 同步与异步区别 优缺点
    元素居中
    width:100%;与width:auto;的区别
    URL、URI和URN三者之间的区别
    JavaScript encodeURI(), decodeURI(), encodeURIComponent(), decodeURIComponent()
    CSS 笔记三(Tables/Box Model/Outline)
    CSS 笔记二(Text/Fonts/Links/Lists)
    CSS 笔记一(Selectors/ Backgrounds/ Borders/ Margins/ Padding/ Height and Width)
    javascript,jQuery,trim()
  • 原文地址:https://www.cnblogs.com/raphael5200/p/5114906.html
Copyright © 2011-2022 走看看