可绑定属性的setter永远不会触发

Yur*_*biy 2 c# data-binding wpf xamarin.forms

我为Label创建了一个自定义渲染器.现在我想用它的焦点状态进行操作,所以我创建了可绑定的属性和事件.当我从自定义渲染器更改可绑定属性时,它工作正常:Element.IsFocused = true; 但是当我从视图模型更改它时,它会影响XAML视图,但由于某些原因,不会为此属性调用setter.这是代码:

在自定义类中:

 public new static readonly BindableProperty IsFocusedProperty =
           BindableProperty.Create(nameof(IsFocused), typeof(bool), typeof(FloatingEntry), false);

        public new bool IsFocused
        {
            get { return (bool)GetValue(IsFocusedProperty); }
            set
            {
                SetValue(IsFocusedProperty, value);
                if (value) Focus();
            }
        }  
Run Code Online (Sandbox Code Playgroud)

在XAML中:

IsFocused="{Binding PasswordEntryIsFocused}"
Run Code Online (Sandbox Code Playgroud)

在视图模型中:

 private bool _passwordEntryIsFocused;
         public bool PasswordEntryIsFocused
            {
                get { return _passwordEntryIsFocused; }
                set
                {
                    SetProperty(ref _passwordEntryIsFocused, value);
                }
            }
Run Code Online (Sandbox Code Playgroud)

在View Model中的某种方法: PasswordEntryIsFocused = true;

这不是new关键字,我尝试没有它.并且绑定工作,因为我试图将它与可视属性绑定,IsVisible就像它应该工作一样,但是setter总是只从自定义渲染器调用.

我想我可能会在可绑定的属性工作环境中遗漏一些东西.

Pat*_*man 6

但是当我从视图模型中更改它时,它会影响XAML视图,但由于某些原因,不会为此属性调用setter.

是的,这是WPF的一个常见错误.XAML生成的代码不会调用setter,而是立即更改绑定的依赖项属性.除非您附加活动,否则您无法参加此PropertyChangedCallback活动.

  • 以下是使用它的正确工作示例:https://forums.xamarin.com/discussion/19320/customcontrol (2认同)