国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

WPFPasswordBoxMVVM實現

2019-11-14 15:45:44
字體:
來源:轉載
供稿:網友

由于PassWordBox.Password屬性非依賴屬性,所以不能作為綁定的目標,以下是本人的MVVM實現方法。

 

PasswordBox.Password與TextBox.Text同步,TextBox只是為了演示,實際使用的是TextBox.Text綁定的Source。

通過Behavior添加PasswordChanged事件的事件處理器,以及自定義一個附加屬性實現綁定,Behavior需要引用System.Windows.Interactivity.dll,代碼如下:

using System.Windows;using System.Windows.Controls;using System.Windows.Interactivity;namespace PasswordHelperTest{    public static class PasswordBoxHelper    {        public static readonly DependencyPRoperty PasswordProperty =            DependencyProperty.RegisterAttached("Password",            typeof(string), typeof(PasswordBoxHelper),            new FrameworkPropertyMetadata(string.Empty, OnPasswordPropertyChanged));        private static void OnPasswordPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)        {            PasswordBox passwordBox = sender as PasswordBox;            string password = (string)e.NewValue;            if (passwordBox != null && passwordBox.Password != password)            {                passwordBox.Password = password;            }        }        public static string GetPassword(DependencyObject dp)        {            return (string)dp.GetValue(PasswordProperty);        }        public static void SetPassword(DependencyObject dp, string value)        {            dp.SetValue(PasswordProperty, value);        }    }    public class PasswordBoxBehavior : Behavior<PasswordBox>    {        protected override void OnAttached()        {            base.OnAttached();            AssociatedObject.PasswordChanged += OnPasswordChanged;        }        private static void OnPasswordChanged(object sender, RoutedEventArgs e)        {            PasswordBox passwordBox = sender as PasswordBox;            string password = PasswordBoxHelper.GetPassword(passwordBox);            if (passwordBox != null && passwordBox.Password != password)            {                PasswordBoxHelper.SetPassword(passwordBox, passwordBox.Password);            }        }        protected override void OnDetaching()        {            base.OnDetaching();            AssociatedObject.PasswordChanged -= OnPasswordChanged;        }    }}

View代碼如下:

<Window x:Class="PasswordHelperTest.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"        xmlns:local="clr-namespace:PasswordHelperTest"        Title="MainWindow" Height="350" Width="525">    <StackPanel>        <PasswordBox Margin="3" local:PasswordBoxHelper.Password="{Binding Path=Password,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}">            <i:Interaction.Behaviors>                <local:PasswordBoxBehavior />            </i:Interaction.Behaviors>        </PasswordBox>        <TextBox Margin="3" Text="{Binding Path=Password,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox>    </StackPanel></Window>
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.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;namespace PasswordHelperTest{    /// <summary>    /// MainWindow.xaml 的交互邏輯    /// </summary>    public partial class MainWindow : Window    {        public MainWindow()        {            InitializeComponent();            this.DataContext = new MainWindowViewModel();        }    }}

ViewModel引用Microsoft.Practices.Prism.dll,代碼如下:

using Microsoft.Practices.Prism.ViewModel;using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace PasswordHelperTest{    class MainWindowViewModel : NotificationObject    {        private string _password;        public string Password        {            get { return _password; }            set            {                if (_password != value)                {                    _password = value;                    this.RaisePropertyChanged("Password");                }            }        }    }}

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵山县| 新绛县| 内黄县| 基隆市| 嘉定区| 江源县| 正阳县| 罗山县| 留坝县| 麻阳| 栾城县| 白城市| 祁阳县| 确山县| 新昌县| 唐海县| 萍乡市| 尚志市| 湖北省| 贵德县| 大余县| 衢州市| 泸溪县| 山西省| 布拖县| 友谊县| 莲花县| 福建省| 南开区| 射阳县| 青冈县| 贺兰县| 新竹市| 洛隆县| 开远市| 惠州市| 嘉兴市| 静宁县| 九龙城区| 德江县| 台北市|