• 菲佣WPF——2(ViewModel binding RouteEvent)


    在ViewModel中绑定RouteEvent,参考国外的大牛,自娱自乐写了一个。

    1:XAML  代码

    <Window x:Class="WpfApplication4.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:local="clr-namespace:WpfApplication4"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <CheckBox Width="100" Height="20" Content="Demo CheckBox" local:CheckBoxBehavior.Click="{Binding DemoClick}" />
        </Grid>
    </Window>

    2:ViewModel 代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Input;
    
    namespace WpfApplication4
    {
        public class MainWindowsViewModel
        {
            #region << Property >>
            public ICommand DemoClick { get; set; }
            #endregion
    
            #region << Constructor >>
            public MainWindowsViewModel()
            {
                DemoClick = new DeletegateCommand(DemoMethod);
            }
            #endregion
    
            #region << Method >>
            public void DemoMethod()
            {
                MessageBox.Show("Demo CheckBox Click");
            }
    
            public bool CanDemoMethod()
            {
                return false;
            }
            #endregion
    
        }
    }

    3:CheckBoxBehavior 代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Input;
    
    namespace WpfApplication4
    {
        public static class CheckBoxBehavior
        {
            #region << Property >>
            public static readonly DependencyProperty ClickProperty = DependencyProperty.RegisterAttached("Click", typeof(ICommand), typeof(CheckBoxBehavior), new UIPropertyMetadata(null,ClickCallBack));
    
            public static ICommand GetClick(DependencyObject obj)
            {
                return (ICommand)obj.GetValue(ClickProperty);
            }
    
            public static void SetClick(DependencyObject obj,ICommand cmd)
            {
                obj.SetValue(ClickProperty, cmd);
            }
            #endregion
    
            #region << Method >>
            private static  void ClickCallBack(DependencyObject obj, DependencyPropertyChangedEventArgs e)
            {
                if (obj is CheckBox)
                {
                    var checkBox = obj as CheckBox;
    
                    if (e.NewValue != null)
                    {
                        checkBox.Click += ClickEvent;
                    }
                    else
                    {
                        checkBox.Click -= ClickEvent;
                    }
                }
            }
    
            static void ClickEvent(object sender, RoutedEventArgs e)
            {
                var cmd = GetClick(sender as CheckBox);
    
                if (cmd != null)
                {
                    cmd.Execute(null);
                }
    
            }
            #endregion
        }
    }

    用了这么多代码来实现绑定RouteEvent事件,很多人说着又必要吗。

    写这么多代码有意义吗,,,

    那请想下为什么用WPF,UI开发的目的是什么?

    UI最终的目的是UI和逻辑分离。

    写这么多其实就是为了逻辑和Ui分离。

  • 相关阅读:
    MyMacro
    CConfigXmlFile02
    “十步一杀” 干掉你的职场压力
    只有聪明人才悟到:通向成功的饥饿法则
    高层管理者应具备什么样的特点? (转)
    两个小故事,告诉你不可不知的成功密码
    中秋望月
    锦里中秋有感
    支招:如何增强创业信心,克服创业恐惧?
    创业者必看:创业得出的10条血泪经验
  • 原文地址:https://www.cnblogs.com/qiurideyun/p/2910637.html
Copyright © 2020-2023  润新知