zoukankan      html  css  js  c++  java
  • 菲佣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分离。

  • 相关阅读:
    Springboot中mybatis控制台打印sql语句
    CTF资源
    Python渗透测试工具合集
    哪些方法可以绕过PowerShell Execution Policy?
    路由器漏洞挖掘使用的脚本
    路由器漏洞挖掘(栈,危险函数,方法)
    路由器漏洞挖掘环境搭建
    MIPS 汇编指令学习
    Linux下安装Sublime Text 3 及使用快捷方式
    Ubuntu 16.04 安装Python 3.6
  • 原文地址:https://www.cnblogs.com/qiurideyun/p/2910637.html
Copyright © 2011-2022 走看看