Ich habe einen benutzerdefinierten Renderer für ein Label erstellt. Jetzt wollte ich mit seinem Fokuszustand manipulieren, also habe ich bindbare Eigenschaft und Ereignis erstellt. Es funktioniert gut, wenn ich die bindbare Eigenschaft von benutzerdefinierten Renderer wie folgt ändern: Element.IsFocused = true;
Aber wenn ich es aus dem Ansichtsmodell ändern, wirkt es sich auf die XAML-Ansicht, aber aus bestimmten Gründen nicht den Setter für diese Eigenschaft aufrufen. Hier ist der Code:Setter der bindbaren Eigenschaft wird nie ausgelöst
In benutzerdefinierter Klasse:
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();
}
}
In XAML:
IsFocused="{Binding PasswordEntryIsFocused}"
In View Modell:
private bool _passwordEntryIsFocused;
public bool PasswordEntryIsFocused
{
get { return _passwordEntryIsFocused; }
set
{
SetProperty(ref _passwordEntryIsFocused, value);
}
}
In Ansicht Modell in irgendeiner Methode: PasswordEntryIsFocused = true;
Es geht nicht um new
keyword, ich habe es ohne versucht. Und Bindung funktioniert, weil ich versuchte, es mit einer visuellen Eigenschaft, wie IsVisible
zu binden und es funktionierte wie es soll, aber Setter wird immer nur von einem benutzerdefinierten Renderer aufgerufen.
Ich denke, ich kann etwas in einem Kontext der bindbaren Eigenschaft Arbeit vermissen.
Hier ist ein Beispiel für die ordnungsgemäße Arbeit mit ihm: https://forums.xamarin.com/discussion/19320/customcontrol –