- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要一个 PasswordBox 和另一个 PasswordBox 来重复选择的密码和一个提交按钮。
这是我得到的:
WPF:
<UserControl.Resources>
<converter:PasswordConverter x:Key="PasswdConv"/>
</UserControl.Resources>
<PasswordBox PasswordChar="*" Name="pb1"/>
<PasswordBox PasswordChar="*" Name="pb2"/>
<Button Content="Submit" Command="{Binding ChangePassword}">
<Button.CommandParameter>
<MultiBinding Converter="{StaticResource PasswdConv}">
<MultiBinding.Bindings>
<Binding ElementName="pb1"/>
<Binding ElementName="pb2"/>
</MultiBinding.Bindings>
</MultiBinding>
</Button.CommandParameter>
</Button>
转换器:
public class PasswordConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
List<string> s = values.ToList().ConvertAll(p => SHA512(((PasswordBox)p).Password));
if (s[0] == s[1])
return s[0];
return "|NOMATCH|";
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
命令(更改密码):
if ((p as string) != "|NOMATCH|")
{
MessageBox.Show("Password changed");
}
else
{
MessageBox.Show("Passwords not matching");
}
当我在转换器和命令中设置断点时,我得到以下结果:一旦 View 加载,它就会跳入转换器并尝试转换两个 PasswordBoxes。两者都是空的。当我按下按钮时(两个 PasswordBoxes 中的内容无关紧要)它不会进入转换器并在 command-if 处停止。 P代表空密码。
最佳答案
Convert
方法只会在多绑定(bind)的源属性发生变化时调用,但您绑定(bind)到 PasswordBox
本身并且它永远不会改变。
并且绑定(bind)到 Password
属性也不起作用,因为当此属性更改时 PasswordoBox
不会引发任何更改通知。
虽然它确实引发了一个 PasswordChanged
事件,因此您可以处理此事件并在此事件处理程序中设置 CommandParameter
属性,而不是使用转换器:
private void OnPasswordChanged(object sender, RoutedEventArgs e)
{
string password = "|NOMATCH|";
List<PasswordBox> pb = new List<PasswordBox>(2) { };
List<string> s = new List<string>[2] { SHA512(pb1.Password), SHA512(pb2.Password) };
if (s[0] == s[1])
password = s[0];
btn.CommandParameter = password;
}
XAML:
<PasswordBox PasswordChar="*" Name="pb1" PasswordChanged="OnPasswordChanged"/>
<PasswordBox PasswordChar="*" Name="pb2" PasswordChanged="OnPasswordChanged"/>
<Button x:Name="btn" Content="Submit" Command="{Binding ChangePassword}" />
如果您希望能够在多个 View 和 PasswordBox
控件中重用此功能,您应该编写 attached behaviour .
关于c# - WPF 重复密码 IMultiValueConverter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51920617/
下面是我的 DataGrid,其中包含一些与进一步向下的弹出控件相关联的附加属性。 ComboBox 由枚举填充。 这是处理
我想要一个 PasswordBox 和另一个 PasswordBox 来重复选择的密码和一个提交按钮。 这是我得到的: WPF:
我正在 WPF MVVM 中开发应用程序。我希望有一个 Width 属性,带有一个转换器,或者 * Auto return 。我的转换器返回了良好的值,但无济于事。在这里,我的转换器 class F
我正在开发一个发票系统,并且正在使用 DataGrid 进行项目输入。我希望用户能够输入不同单位(例如英寸、英尺、米)的数量,并将输入的数量转换为商品的库存单位。我的第一个想法是实现一个 IMulti
我正在编写一个包含两个绑定(bind)的 MultiBinding - 每个都返回一个 bool 值。使用 MultiBindings 您需要指定一个 IMultiValueConverter。在我的
如您所知,Silverlight 3 不支持 IMultiValueConverter 并且...我非常需要它。一个 Web 服务代理,它定义了我需要在我的 UI 中显示的类结构。对象定义类有一些数组
我需要将 ItemsControl 中的矩形绘制为根据绑定(bind)集合中定义的值和集合的最大值计算的宽度。所以我想我需要使用 MultiValueConverter 来传递项目的值和集合的最大值。
我正在将现有的 WPF 应用程序移植到 Windows 8 应用程序。 在 WPF 应用程序中,我们大量使用 MultiValue 转换器来允许我们创建由 UI 元素属性和 View 模型属性(河马对
我想创建一个 C# WPF 表单来收集设备的测量值,但一些用户坚持使用英尺和英寸进行测量,而其他(较年轻的)用户则使用公制进行所有操作。数据库以米为单位存储所有内容,我认为这是使用 IMultiVal
问:为什么我使用 MultiBinding 和 IMultiValueConverter 的自定义 TextBox UserControl 的 Convert() 方法只被调用一次(在实例化期间)??
我创建了一个简单的转换器来连接我的 WPF 应用程序中四个文本框的文本。 这是转换器: public class FourString:IMultiValueConverter { publ
我有以下代码:
作为学习 WPF 的一部分,我刚刚完成了名为“在 WPF 中使用数据绑定(bind)”的 MS 实验室练习 ( http://windowsclient.net/downloads/folders/h
我有一个多重绑定(bind)的问题: 为了计算 Canvas.Top 值,myConv
我是一名优秀的程序员,十分优秀!