jinying8869 发表于 2015-5-9 07:20:20

Windows Phone 7 MVVM模式通讯方式之实现Attached Behavior

MVVM模式的View与ViewModel的三大通讯方式:Binding Data(实现数据的传递)、Command(实现操作的调用)和Attached
Behavior(实现控件加载过程中的操作)。

(1)Windows Phone 7 MVVM模式通讯方式之实现Binding Data。

(2)Windows Phone 7 MVVM模式通讯方式之实现Command。

(3)Windows Phone 7 MVVM模式通讯方式之实现Attached Behavior。



下面通过一个实例实现MVVM模式的Attached Behavior通讯,Attached Behavior与Command的区别就是,Attached Behavior在控件的加载过程中完成它的任务。

下面看一下实例的运行效果:







(1)MainPage.xaml页面代码,View层






   
      
            
            
      
      
            
            
      
      
            
            
            
            
            
            
      
   


(2)Behavior.cs类代码,处理附加的属性和事件。





using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace AttachedBehaviorDemo
{
    static public class Behavior
    {
      //注册一个附加属性BrushProperty,在XAML中名字为Brush,是Brush类型,在Hover类中,PropertyMetadata初始化元数据
      public static readonly DependencyProperty BrushProperty = DependencyProperty.RegisterAttached(
            "Brush",
            typeof(Brush),
            typeof(Behavior),
            newPropertyMetadata (null, new PropertyChangedCallback(OnHoverBrushChanged)));
      ///
      /// 获取Brush的属性值
      ///
      ///
      ///
      public static Brush GetBrush(DependencyObject obj)
      {
            return (Brush)obj.GetValue(BrushProperty);
      }
      ///
      /// 设置属性的值
      ///
      ///
      ///
      public static void SetBrush(DependencyObject obj, Brush value)
      {
            obj.SetValue(BrushProperty, value);
      }
      ///
      /// 属性初始化
      ///
      ///
      ///
      private static void OnHoverBrushChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
      {
            //获取属性所在的TextBlock控件
            TextBlock control = obj as TextBlock;
            //注册控件的事件
            if (control != null)
            {
                //注册鼠标进入事件
                control.MouseEnter += new MouseEventHandler(OnControlEnter);
                //注册鼠标离开事件
                control.MouseLeave += new MouseEventHandler(OnControlLeave);
            }
      }
      ///
      /// 鼠标进入事件
      ///
      ///
      ///
      static void OnControlEnter(object sender, MouseEventArgs e)
      {
            //获取当前的TextBlock控件
            TextBlock control = (TextBlock)e.OriginalSource;
            //设置控件的前景颜色为红色
            control.Foreground = new SolidColorBrush(Colors.Red);
      }
      ///
      /// 鼠标离开事件
      ///
      ///
      ///
      static void OnControlLeave(object sender, MouseEventArgs e)
      {
            //获取当前的TextBlock控件
            TextBlock control = (TextBlock)e.OriginalSource;
            //设置控件的前景颜色为当前控件的Brush属性的值
            control.Foreground = GetBrush(control);
      }
    }
}
页: [1]
查看完整版本: Windows Phone 7 MVVM模式通讯方式之实现Attached Behavior