Я согласен с Сэмом и Ксасером и, на самом деле, понял это немного дальше. Я не думаю, что вы должны реализовывать интерфейс INotifyPropertyChanged в UserControl вообще ... элемент управления уже является DependencyObject и, следовательно, уже поставляется с уведомлениями. Добавление INotifyPropertyChanged к DependencyObject является излишним и «пахнет» неправильно для меня.
Что я сделал, так это реализовал оба свойства как DependencyProperties, как предлагает Сэм, но затем просто получил PropertyChangedCallback из «первого» свойства зависимостей, чтобы изменить значение «второго» свойства зависимостей. Поскольку оба являются свойствами зависимостей, оба автоматически отправляют уведомления об изменениях всем заинтересованным подписчикам (например, привязка данных и т. Д.)
В этом случае свойство зависимости A - это строка InviteText, которая инициирует изменение свойства зависимости B, свойства Visibility с именем ShowInvite. Это было бы распространенным случаем, если у вас есть текст, который вы хотите полностью скрыть в элементе управления с помощью привязки данных.
public string InviteText
{
get { return (string)GetValue(InviteTextProperty); }
set { SetValue(InviteTextProperty, value); }
}
public static readonly DependencyProperty InviteTextProperty =
DependencyProperty.Register("InviteText", typeof(string), typeof(InvitePrompt), new UIPropertyMetadata(String.Empty, OnInviteTextChanged));
private static void OnInviteTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
InvitePrompt prompt = d as InvitePrompt;
if (prompt != null)
{
string text = e.NewValue as String;
prompt.ShowInvite = String.IsNullOrWhiteSpace(text) ? Visibility.Collapsed : Visibility.Visible;
}
}
public Visibility ShowInvite
{
get { return (Visibility)GetValue(ShowInviteProperty); }
set { SetValue(ShowInviteProperty, value); }
}
public static readonly DependencyProperty ShowInviteProperty =
DependencyProperty.Register("ShowInvite", typeof(Visibility), typeof(InvitePrompt), new PropertyMetadata(Visibility.Collapsed));
Примечание. Я не включаю здесь сигнатуру или конструктор UserControl, потому что в них нет ничего особенного; им вообще не нужно создавать подклассы из INotifyPropertyChanged.