如果您可以容忍IMultiValueConverter的代码,那么下面是非常MVVM。
<Page.Resources>
<local:ConfirmPasskey x:Key="ConfirmPasskey" />
</Page.Resources>
...
<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>
我使用一个TextBlock,因为我想provied伪装饰,但可以使用任何相关的财产,...如的IsEnabled
财产布尔一个登录提示按钮。这里是我的IMultiValueConverter,它可能会返回一个布尔,而不是密码验证文本:
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();
}
}
是的你是对的,这是因为安全(忽略绑定)。所以这个博客介绍了一种方法来处理这与附加属性:blog.functionalfun.net/2008/06/... –
和http://stackoverflow.com/a/1493330/440030 –
为什么你删除了你的答案? – CampDev