2017-04-10 1 views
1

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.

Antwort

5

Aber wenn ich es aus dem Ansichtsmodell ändere, beeinflusst es die XAML-Ansicht, aber ruft aus bestimmten Gründen nicht den Setter für diese Eigenschaft auf.

Ja, das ist ein häufiger Fehler mit WPF. Der von XAML generierte Code ruft den Setter nicht auf, sondern ändert die gebundene Abhängigkeitseigenschaft sofort. Sie können dieses Ereignis nicht unterbrechen, es sei denn, Sie fügen das Ereignis PropertyChangedCallback bei.

+2

Hier ist ein Beispiel für die ordnungsgemäße Arbeit mit ihm: https://forums.xamarin.com/discussion/19320/customcontrol –

Verwandte Themen