我为标签创建了一个自定义渲染器。现在我想用它的焦点状态来操作,所以我创建了可绑定(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/