将WPF标签可见性绑定到输入的密码长度

时间:2014-03-19 22:27:16

标签: wpf xaml data-binding

我试图将标签的可见性绑定到PasswordBox控件的类型长度。我将标签的Visibility属性绑定到目标为passwordbox的SecurePassword.Length属性的转换器的输出。

绑定工作正常,但只有一次,当应用程序首次启动时。它并不保持同步。如果我使用足够长的值来播种密码(如我的示例所示),则会显示该消息,但在我键入或删除文本时它不会更新。显然,我错过了一些东西。

我使用this问题作为我的实施模板。

我的Xaml:

<PasswordBox Name="PwdPassword" HorizontalAlignment="Left" MinWidth="120" 
             Password="abcdefghijklmnopqrstuvwxyz1234567890"></PasswordBox>

<Label Name="LblPasswordMsg" Content="Message" FontWeight="Bold">
    <Label.Style>
         <Style TargetType="{x:Type Label}">
              <Setter Property="Visibility" Value="{Binding UpdateSourceTrigger=PropertyChanged, ElementName=PwdPassword, Mode=OneWay,
                   Path=SecurePassword.Length, Converter={StaticResource IntLengthVisibilityConverter}}" />
         </Style>
    </Label.Style>
</Label>

我的转换器:

[ValueConversion(typeof(int), typeof(Visibility))]
public class IntLengthVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // Do the conversion from int to visibility
        int length = (int)value;
        Visibility visible = length >= 25 ? Visibility.Visible : Visibility.Hidden;
        return visible;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        // Do the conversion from visibility to int
        return null;
    }
}

1 个答案:

答案 0 :(得分:1)

我认为问题是SecurePassword.Length不是依赖属性,因此当其值发生变化时不会发生自动通知。