Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在XAML中验证密码和密码确认_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C# 在XAML中验证密码和密码确认

C# 在XAML中验证密码和密码确认,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我正在使用MVVM,我的阶段是:我有两个密码箱 <PasswordBox x:Name="Password" Width="150" Height="30" /> <PasswordBox x:Name="PasswordConfirmation" Width="150" Height="30" /> 我想在Password和PasswordConfirmation之间对xaml进行验证。类似于网站中的JQuery 我不想破坏MVVM

我正在使用MVVM,我的阶段是:我有两个密码箱

        <PasswordBox x:Name="Password" Width="150" Height="30" />
        <PasswordBox x:Name="PasswordConfirmation" Width="150" Height="30" />

我想在Password和PasswordConfirmation之间对xaml进行验证。类似于网站中的JQuery


我不想破坏MVVM,我的意思是,我不想让代码落后

如果您可以容忍IMultiValueConverter的代码,那么下面的代码非常有用

<Page.Resources>
    <local:ConfirmPasskey x:Key="ConfirmPasskey" />
</Page.Resources>

是的,你说得对,这是因为安全性(忽略绑定)。因此,本博客介绍了一种使用附加属性处理此问题的方法:blog.functionalfun.net/2008/06/…以及为什么删除您的答案?是的,因为我的答案与您的问题无关,PasswordBox是一种特殊情况,在上面的链接中讨论了它。
<PasswordBox x:Name="_PassKey" Grid.Column="1" Grid.Row="1" Margin="0,5,5,0"
    LostFocus="Update_PassCheckError"/>
<PasswordBox x:Name="_PassCheck" Grid.Column="1" Grid.Row="2" Margin="0,5,5,0" 
    LostFocus="Update_PassCheckError" />
<TextBlock x:Name="_PassCheckError" Grid.ColumnSpan="2" Grid.Row="3" Margin="5,5,5,5"
    Foreground="Red" HorizontalAlignment="Center" >
        <TextBlock.Text>
            <MultiBinding Converter="{StaticResource ConfirmPasskey}" Mode="OneWay" >
                <Binding ElementName="_PassKey" />
                <Binding ElementName="_PassCheck" />
            </MultiBinding>
         </TextBlock.Text>
 </TextBlock>
public class ConfirmPasskey : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parm, System.Globalization.CultureInfo culture)
    {
        bool match = (values[0] as PasswordBox).Password.Equals((values[1] as PasswordBox).Password);

        if (targetType.Name.Equals("Nullable`1"))
            return match;

        return (match) ? null : "Passcodes do not match.";
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parm, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}