2017-04-10 84 views
1

我爲標籤創建了一個自定義渲染器。現在我想操縱它的焦點狀態,所以我創建了可綁定的屬性和事件。當我更改自定義渲染器的可綁定屬性時,它工作正常,如下所示: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(); 
      } 
     } 

在XAML:

IsFocused="{Binding PasswordEntryIsFocused}" 

在視圖模型:

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

在視圖模型中的一些方法:PasswordEntryIsFocused = true;

這不是關於new關鍵字,我試過沒有它。 而綁定的作品,因爲我試圖綁定它與視覺屬性,如IsVisible,它是像它應該的工作,但setter總是隻從一個自定義渲染器調用。

我想我可能會錯過一些可綁定屬性工作的環境。

回答

5

但是,當我從視圖模型中改變它時,它會影響XAML視圖,但由於某些原因,不會爲此屬性調用setter。

是的,這是WPF常見的錯誤。 XAML生成的代碼不會調用setter,而是立即更改綁定的依賴項屬性。除非您附加PropertyChangedCallback事件,否則您無法在此活動中休息。

+2

以下是正確使用它的示例: https://forums.xamarin.com/discussion/19320/customcontrol –

相關問題