zoukankan      html  css  js  c++  java
  • Seliverlight 中数据绑定INotifyPropertyChanged 接口的用法 .数据绑定IValueConvert的用法学习笔记

    1.数据绑定
        /// 数据绑定是数据源和目标数据之间的一座桥梁 在Silverlighth中这座桥梁有三个方向
        /// oneWay
        /// TwoWay
        /// OneTime
        /// INotifyPropertyChanged
        ///using System.ComponentModel;
        /// 是告诉我们通知的对象
        /// 我们还需要以为信使来完成这个通知
        /// 更改通知就是数据绑定这座桥梁的信使
        /// 它根据数据流方向来通知数据源和目标数据对方的变化
        /// 要实现接口我们需要实现INotifyPropertyChanged接口,INotifyPropertyChanged具有PropertyChanged 事件
        /// 该事件通知绑定引擎源以更改,以便可以更新目标值,
    2.数据绑定   在Seliverlight中实现数据转换 需要创建数据转换类 并实先IValueConvert接口的Convert方法和ConvertBack方法
       当数据源传递给目标时调用Convert方法 反之调用ConvertBack方法 Converback方法不可省落。

       [ValueConversion(typeof(DateTime), typeof(String))]
    public class DateConverter : IValueConverter
    {
        //在将原数据传递到目标以在Ui显示之前 对原数据进行修改
     //object value,正转递到目标的元数据,
     // Type targetType,目标依赖项属性需要的数据的System.Type
     // object parameter, 要在转换器逻辑中使用的可选参数
     // CultureInfo culture 转换的区域性
     //返回结构 要传递到目标依赖项属性的值
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            DateTime date = (DateTime)value;
            return date.ToShortDateString();
        }

      //再将目标数据传递到原对象之前,对目标数据进行修改
      //System.Window.Data.BindingMode.TwoWay 绑定中进行调用
     //object value,正转递到元的目标数据,
     // Type targetType,源对象需要的数据的System.Type
     // object parameter, 要在转换器逻辑中使用的可选参数
     // CultureInfo culture 转换的区域性
     //返回结构 要传递到源对象的值
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            string strValue = value as string;
            DateTime resultDateTime;
            if (DateTime.TryParse(strValue, out resultDateTime))
            {
                return resultDateTime;
            }
            return DependencyProperty.UnsetValue;
        }
    }
    ///数据转换的使用,在Xaml页面中加入转换代码myConverter,在使用前 在UserControl元素中声明命名空间
    ///xmlns:my="clr-namespace:Sample"
    <UserControl x:Class="ConverterParameterEx.Page"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:ConverterParameterEx"
        Width="400" Height="300">
        <Grid x:Name="LayoutRoot" Background="White">
            <Grid.Resources>
               <local:DateFormatter x:Key="FormatConverter" />
            </Grid.Resources>

            <ComboBox Height="60" Width="200" x:Name="MusicCombo"
                ItemsSource="{Binding}">
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock FontWeight="Bold" Text="{Binding Path=Name, Mode=OneWay}" />
                            <TextBlock Text="{Binding Path=Artist, Mode=OneWay}" />
                            <TextBlock Text="{Binding Path=ReleaseDate, Mode=OneWay,
                            Converter={StaticResource FormatConverter},
                            ConverterParameter=\{0:d\}}" />
                       </StackPanel>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
        </Grid>
    </UserControl>

    using System;
    using System.Collections.ObjectModel;
    using System.Windows.Controls;
    using System.Windows.Data;

    namespace ConverterParameterEx
    {
        public partial class Page : UserControl
        {

            public ObservableCollection<Recording> MyMusic =
                new ObservableCollection<Recording>();
            public Page()
            {
                InitializeComponent();

                // Add items to the collection.
                MyMusic.Add(new Recording("Chris Sells", "Chris Sells Live",
                    new DateTime(2008, 2, 5)));
                MyMusic.Add(new Recording("Luka Abrus",
                    "The Road to Redmond", new DateTime(2007, 4, 3)));
                MyMusic.Add(new Recording("Jim Hance",
                    "The Best of Jim Hance", new DateTime(2007, 2, 6)));

                // Set the data context for the combo box.
                MusicCombo.DataContext = MyMusic;
            }
        }

        // Simple business object.
        public class Recording
        {
            public Recording() { }
            public Recording(string artistName, string cdName, DateTime release)
            {
                Artist = artistName;
                Name = cdName;
                ReleaseDate = release;
            }
            public string Artist { get; set; }
            public string Name { get; set; }
            public DateTime ReleaseDate { get; set; }
        }

        public class DateFormatter : IValueConverter
        {
            // This converts the DateTime object to the string to display.
            public object Convert(object value, Type targetType, object parameter,
                System.Globalization.CultureInfo culture)
            {
                // Retrieve the format string and use it to format the value.
                string formatString = parameter as string;
                if (!string.IsNullOrEmpty(formatString))
                {
                    return string.Format(culture, formatString, value);

                }
                // If the format string is null or empty, simply call ToString()
                // on the value.
                return value.ToString();
            }

            // No need to implement converting back on a one-way binding
            public object ConvertBack(object value, Type targetType,
                object parameter, System.Globalization.CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
    }


     

  • 相关阅读:
    关于uoloadify不能显示效果原因(thinkphp5仿百度糯米)
    thinkphp3.2.3中$this->assign
    PDO
    类的声明 只能有属性和方法(属性没有括号,方法有括号)
    怎删改查
    JS鼠标事件大全
    建表以及 增。删。改。查
    建表、添加数据及数据查询
    html框架
    表的求和及计算
  • 原文地址:https://www.cnblogs.com/fxiaoquan/p/2283036.html
Copyright © 2011-2022 走看看