2017-04-10 10 views
1

ラベル用のカスタムレンダラーを作成しました。今はフォーカス状態で操作したいので、バインド可能なプロパティとイベントを作成しました。 Element.IsFocused = true; ビューモデルから変更すると、XAMLビューに影響しますが、何らかの理由でこのプロパティのセッターが呼び出されません。ここでは、コードは次のようになります。バインド可能なプロパティのセッターは一切発生しません

カスタムクラスでは:

XAMLで
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(); 
      } 
     } 

ビューモデルで
IsFocused="{Binding PasswordEntryIsFocused}" 

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

ビューモデルでは、いくつかの方法で:PasswordEntryIsFocused = true;

それはnewというキーワードではなく、私はそれを試してみました。 バインディングは、IsVisibleのような視覚的なプロパティでバインドしようとしていたため、正しく動作していましたが、setterは常にカスタムレンダラーからのみ呼び出されます。

私はバインディング可能なプロパティの仕事の文脈で何かを見逃すかもしれないと思う。

答えて

5

ビューモデルから変更すると、XAMLビューに影響しますが、何らかの理由でこのプロパティの設定が呼び出されません。

はい、これはWPFのよくある間違いです。 XAMLによって生成されたコードは、setterを呼び出すのではなく、バインドされた依存関係プロパティをすぐに変更します。 PropertyChangedCallbackイベントを添付しない限り、このイベントを中断することはできません。

+2

適切な作業の例を次に示します。 https://forums.xamarin.com/discussion/19320/customcontrol –

関連する問題