c# - 可绑定(bind)属性的 setter 永远不会触发

标签 c# wpf data-binding xamarin.forms

我为标签创建了一个自定义渲染器。现在我想用它的焦点状态来操作,所以我创建了可绑定(bind)的属性和事件。当我像这样从自定义渲染器更改可绑定(bind)属性时,它工作正常:Element.IsFocused = true; 但是当我从 View 模型更改它时,它会影响 XAML View ,但由于某些原因不会调用此属性的 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();
            }
        }  

在 XAML 中:

IsFocused="{Binding PasswordEntryIsFocused}"

在 View 模型中:

 private bool _passwordEntryIsFocused;
         public bool PasswordEntryIsFocused
            {
                get { return _passwordEntryIsFocused; }
                set
                {
                    SetProperty(ref _passwordEntryIsFocused, value);
                }
            }

在某些方法的 View 模型中:PasswordEntryIsFocused = true;

这与 new 关键字无关,我试过没有它。 并且绑定(bind)有效,因为我尝试将它与视觉属性绑定(bind),例如 IsVisible 并且它按应有的方式工作,但 setter 始终仅从自定义渲染器调用。

我想我可能会遗漏一些关于可绑定(bind)属性工作的内容。

最佳答案

But when I change it from the view model, it affects XAML view, but for some reasons doesn't call the setter for this property.

是的,这是 WPF 的一个常见错误。 XAML 生成的代码不调用 setter,而是立即更改绑定(bind)的依赖项属性。除非附加 PropertyChangedCallback 事件,否则您无法中断此事件。

关于c# - 可绑定(bind)属性的 setter 永远不会触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43319127/

相关文章:

c# - 远程服务器声明表不存在

c# - AVX2 SIMD XOR 在 .NET 中没有产生性能改进

c# - 寻呼机 HTML 查看器

c# - WPF DataGrid - 新条目的行不可见

javascript - AngularJS:绑定(bind)一次到属性

c# - 将两个 foreach 语句合二为一

c# - 我应该在 Prism 的什么地方使用 `RegisterViewWithRegion`?

c# - 如何获取在运行时分配 Name 的 TextBox 的 Text 值?

wpf 简单 mvvm 绑定(bind)不工作

javascript - 在 AngularJS 中使用 ng-style 和百分比值设置 HTML 元素宽度