繁体   English   中英

密码更改事件行为在使用mvvm的prism中无法正常工作

[英]Password change event behaviour not working properly in prism using mvvm

我正在触发密码更改事件和命令操作xaml

 <PasswordBox VmWindow:PasswordHelper.Attach="True" Height="25" Width="180" HorizontalAlignment="Left" 
                             FontFamily="Arial" FontSize="11" BorderBrush="#FF959BA0" TabIndex="2"
                             VmWindow:PasswordHelper.Password="{Binding Path=Password, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" >
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="PasswordChanged">
                                <i:InvokeCommandAction Command="{Binding ChangePasswordCommand}" />
                        </i:EventTrigger>
                    </i:Interaction.Triggers>

                </PasswordBox>

密码更改事件代码:

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

命令行动

public ICommand ChangePasswordCommand { get; private set; }
        public LoginViewModel ViewModel { get; set; }
        private void ExecuteChangePasswordCommand()
        {
            try
            {
                if (loginModel != null)
                {
                    loginModel.LoginPassword = Password;
                }
            }
            catch (Exception exception)
            {
            }

        }

问题:

当应用程序加载我在文本框中输入char时会发生什么事情“事件首先触发,然后执行正常情况下的操作”,但是当我按下第二个字符“我的操作首先触发然后触发这就是问题”

我不知道天气是预定义的过程还是我做错了什么。因为根据我的顺序应该总是事件,行动行动,事件

请让我知道我错在哪里。

最后花了很多时间我能够通过一些额外的改变来解决上述问题

添加Microsoft.Expressions.Interactions参考

添加两个参考:

xmlns:i="clrnamespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:ei=http://schemas.microsoft.com/expression/2010/interactions

在密码框中进行了一些更改:

<PasswordBox VmWindow:PasswordHelper.Attach="True" Height="25" Width="180" HorizontalAlignment="Left" 
                             FontFamily="Arial" FontSize="11" BorderBrush="#FF959BA0" TabIndex="2"
                             VmWindow:PasswordHelper.Password="{Binding Path=Password, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" >
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="PasswordChanged">
                            <ei:CallMethodAction TargetObject="{Binding}" MethodName="changePassword"/>
                        </i:EventTrigger>
                    </i:Interaction.Triggers>


                </PasswordBox>

在LoginViewModel中创建一个方法

 public void changePassword(object sender, RoutedEventArgs e)
        {
            PasswordBox passwordBox = sender as PasswordBox;
            loginModel.LoginPassword = passwordBox.Password;
        }

完成改变其干净的MVVM,现在没有代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM