Handycontrol组件库的Bug

我的WPF程序使用了Handycontrol组件库,前端写了

 <Button
       Width="100"
       Height="30"
       Margin="40,20,20,-100"
       HorizontalAlignment="Center"
       Background="#FF0078D7"
       Command="{Binding LoginCommand}"
       CommandParameter="{Binding Password}"
       Content="登录"
       IsDefault="True" />
	   <hc:PasswordBox
      x:Name="txtPassword"
      Width="250"
      Margin="10,0"
      hc:InfoElement.Placeholder="请输入密码"
      pwdBehavior:PasswordBoxProvider.Attach="True"
      pwdBehavior:PasswordBoxProvider.Password="{Binding Password, Mode=TwoWay}"
      CaretBrush="#FFD94448"
      FontSize="16"
      SelectionBrush="#FFD94448"
      ShowEyeButton="True" />

1、因为不管是原生的WPF还是Handycontrol组件库,里面的密码框的Password属性都是普通属性,不是依赖属性,不能进行绑定,所以我必须自己写一个依赖属性,如,我上面写的

pwdBehavior:PasswordBoxProvider.Password="{Binding Password, Mode=TwoWay}"

我可以显示的在后台ViewModel代码中绑定它,

 private string _password;
 public string Password
  {
      get => _password;
      set => SetProperty(ref _password, value); 
  }

然后去写构造函数去写

Password = "123456";

那么启动程序界面上密码框显示123456,这是没问题的,
并且我登录的参数也绑定了Password,也没问题也能传递过来值,
现在假如我登录的参数不直接绑定后台ViewModel的Password,

 CommandParameter="{Binding ElementName=txtPassword,Path=(pwdBehavior:PasswordBoxProvider.Password)}"

只要构造器的 Password = "123456";存在,那么我这两种写法都是没问题的,
但是假如我的构造器不去主动的写 Password = "123456";那么启动程序后界面密码框是空的,需要我去输入,我不管输入多少,这个密码框走的是密码框的普通属性Password,而不是

pwdBehavior:PasswordBoxProvider.Password="{Binding Password, Mode=TwoWay}"

因为自从我写了 pwdBehavior:PasswordBoxProvider.Password="{Binding Password, Mode=TwoWay}"后,实际上密码框存在两个Password属性,一个是pwdBehavior:PasswordBoxProvider.Password依赖属性,一个是Password普通属性,
而如果我在后台的构造器不去显示的指定绑定,那么前端输入的会是走的Password的线路,而不去走pwdBehavior:PasswordBoxProvider.Password,至此绑定失效,传参失效,
而为了测试我登录按钮绑定是否有问题我写了

CommandParameter="{Binding ElementName=txtUsername,Path=Text}"
CommandParameter="{Binding ElementName=txtPassword,Path=Password}"

去做不同的测试,结果 CommandParameter="{Binding ElementName=txtPassword,Path=Password}"不起作用, CommandParameter="{Binding ElementName=txtUsername,Path=Text}"起作用,
说明问题出在控件本身上,是Handycontrol在Password和 pwdBehavior:PasswordBoxProvider.Password之间不知道该如何选择,所以两者都没选,是为null

posted @ 2024-06-13 22:23  孤沉  阅读(42)  评论(0编辑  收藏  举报