Я обычно расширяю элементы управления, создавая привязываемые свойства, в этой форме:
public static readonly BindableProperty OnTextProperty = BindableProperty.Create(nameof(OnText),
typeof(string), typeof(TextSwitch), defaultValue: string.Empty, defaultBindingMode: BindingMode.TwoWay,
propertyChanged: HandleOnTextPropertyChanged);
private static void HandleOnTextPropertyChanged(BindableObject bindable, object oldValue, object newValue)
{
(bindable as TextSwitch)?.Rebuild();
}
public string OnText
{
get { return (string)GetValue(OnTextProperty); }
set { SetValue(OnTextProperty, value); }
}
для меня, поскольку я сделал несколько WPF, привязываемые свойства состоят из двух частей: статического поля BindableProperty только для чтения и соответствующегосвойство с GetValue
в получателе и SetValue
в установщике.Но я наткнулся на это: https://github.com/adamped/NavigationMenu/blob/master/NavigationMenu/NavigationMenu/NavigationItem.xaml.cs
, который просто запускает событие PropertyChanged
:
public static readonly BindableProperty TextProperty = BindableProperty.Create(
nameof(Text),
typeof(string),
typeof(NavigationItem),
string.Empty,
propertyChanging: (bindable, oldValue, newValue) =>
{
var ctrl = (NavigationItem)bindable;
ctrl.Text = (string)newValue;
},
defaultBindingMode: BindingMode.OneWay);
private string _text;
public string Text
{
get { return _text; }
set
{
_text = value;
OnPropertyChanged();
}
}
Как это можно объединить с привязываемыми свойствами, чтобы заставить его работать без GetValue
иSetValue
?, и в каких случаях нам нужно использовать один подход над другим?
РЕДАКТИРОВАТЬ
Очевидно, я не привык к понятию самосвязывающего многоразового управления ... но нене звоните GetValue
и SetValue
, необходимые для свойств привязки?