Chapter2 MVVM 辅助类PasswordBoxHelper

Chapter2 MVVM 辅助类PasswordBoxHelper

WPF的PasswordBox控件的Password属性不是依赖属性,无法直接进行数据绑定,为使其在MVVM模式中正常使用

PasswordBoxHelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;

namespace LoginDemo1.Views
{
    //WPF的PasswordBox控件的Password属性不是依赖属性,无法直接进行数据绑定,为使其在MVVM模式中正常使用,
    //可以为PasswordBox增加一个助手类
    public static class PasswordBoxHelper
    {
        public static readonly DependencyProperty PasswordProperty = DependencyProperty.RegisterAttached(
            "Password",
            typeof(string),
            typeof(PasswordBoxHelper),
            new FrameworkPropertyMetadata(string.Empty, OnPasswordPropertyChanged));



        public static readonly DependencyProperty AttachProperty = DependencyProperty.RegisterAttached(
            "Attach",
            typeof(bool),
            typeof(PasswordBoxHelper),
            new PropertyMetadata(false, Attach));




        private static readonly DependencyProperty IsUpdatingProperty = DependencyProperty.RegisterAttached(
            "IsUpdating",
            typeof(bool),
            typeof(PasswordBoxHelper));

        public static void SetAttach(DependencyObject dp, bool value)
        {
            dp.SetValue(AttachProperty, value);
        }
        public static bool GetAttach(DependencyObject dp)
        {
            return (bool)dp.GetValue(AttachProperty);
        }
        public static string GetPassword(DependencyObject dp)
        {
            return (string)dp.GetValue(PasswordProperty);
        }
        public static void SetPassword(DependencyObject dp, string value)
        {
            dp.SetValue(PasswordProperty, value);
        }
        private static bool GetIsUpdating(DependencyObject dp)
        {
            return (bool)dp.GetValue(IsUpdatingProperty);
        }
        private static void SetIsUpdating(DependencyObject dp, bool value)
        {
            dp.SetValue(IsUpdatingProperty, value);
        }

        private static void OnPasswordPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            PasswordBox passwordBox = sender as PasswordBox;
            passwordBox.PasswordChanged -= PasswordChanged;
            if (!(bool)GetIsUpdating(passwordBox))
            {
                passwordBox.Password = (string)e.NewValue;
            }
            passwordBox.PasswordChanged += PasswordChanged;
        }

        private static void Attach(
            DependencyObject sender,
            DependencyPropertyChangedEventArgs e)
        {
            PasswordBox passwordBox = sender as PasswordBox;
            if (passwordBox == null)
                return;
            if ((bool)e.OldValue)
            {
                passwordBox.PasswordChanged -= PasswordChanged;
            }
            if ((bool)e.NewValue)
            {
                passwordBox.PasswordChanged += PasswordChanged;
            }
        }

        private static void PasswordChanged(object sender, RoutedEventArgs e)
        {
            PasswordBox passwordBox = sender as PasswordBox;
            SetIsUpdating(passwordBox, true);
            SetPassword(passwordBox, passwordBox.Password);
            SetIsUpdating(passwordBox, false);
        }
    }
}

View或Control中使用

<PasswordBox Name="txtPassword" Style="{StaticResource InputBoxStyle}"
                     Grid.Row="1" Grid.Column="1"
                     local:PasswordBoxHelper.Attach="True"
                     local:PasswordBoxHelper.Password="{Binding Password, Mode=TwoWay}"></PasswordBox>
OkHttp 是一个用于进行网络请求的开源框架,它基于 Java 的 HttpURLConnection 进行封装,提供了更简单、更强大的网络请求功能。 Retrofit2 是一个基于 OkHttp 的网络请求框架,它通过注解和反射的方式,将网络请求接口转换成具体的网络请求动作。同时,Retrofit2 也提供了许多强大的功能,例如请求头、请求体的自定义、请求解析器的设置、请求拦截器等。 RxJava2 是一个响应式编程框架,它提供了一种更优雅和简洁的处理异步操作的方式。通过使用观察者模式和链式调用的方式,我们可以简化对多个异步操作的管理和处理,同时提供了丰富的操作符,用于处理和组合异步数据流。 MVVM 是一种用于设计和实现用户界面的架构模式。它将应用程序的界面逻辑和数据逻辑分开,并通过数据绑定机制实现二者之间的通信。在 MVVM 中,Model 层负责数据的获取和处理,View 层负责界面的显示和用户输入的处理,而 ViewModel 则负责衔接二者之间的通信。 通过将 OkHttp、Retrofit2、RxJava2 和 MVVM 结合使用,我们可以构建出一个功能强大、性能优秀、响应迅速的网络请求和数据处理框架。OkHttp 提供了稳定可靠的网络请求功能,Retrofit2 则提供了简单易用的网络接口转换方式,RxJava2 则提供了异步数据处理和链式调用的能力,而 MVVM 则提供了一种清晰的架构模式,使得我们可以更好地组织应用程序的逻辑。总的来说,这些技术和框架的结合能够让我们在开发中更加高效、稳定和灵活。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值