как и где использовать DependencyProperty - PullRequest
0 голосов
/ 06 октября 2010

Я новичок в WPF, поэтому, прочитав некоторое время, я пришел к выводу, что мою проблему необходимо решить с помощью этого шаблона: DependencyProperty.

Я хочу, чтобы у моего ToggleButton было другое логическое свойство.

Моя проблема в том, где я должен назначить это свойство и как? Внутри объекта, который связан с ToggleButton?

Допустим, у меня есть ячейка класса (которая привязана к этому Button), и при нажатии на нее я хочу, чтобы с этого момента она удерживала новое лицо с триггером.

Моя новая собственность будет:

 bool wasClick 

Может кто-нибудь объяснить мне, как я должен написать это и рассказать мне больше об этой новой концепции?

EDIT: Основная тема - где я должен определить это, так что я хочу, чтобы он ассоциировался с Button, но где я должен написать код. Допустим, у меня есть класс, связанный с Button. Должен ли я написать:

public static readonly DependencyProperty IsSpinningProperty = 
       DependencyProperty.Register(
...    "IsSpinning", typeof(Boolean),

в этом классе или я должен написать это в моей модели представления? Если да, то где и как?

1 Ответ

1 голос
/ 06 октября 2010

Как следует из названия (что-то не так), свойство зависимости - это свойство, значение которого может зависеть от чего-то другого.Как правило, это означает свойство, значение которого автоматически (и динамически) определяется платформой WPF при определенных условиях.Наиболее распространенные условия:

  • Свойство имеет значение по умолчанию или наследует свое значение от предка в визуальном дереве.В этом случае значение свойства определяется без его установки.
  • Свойство является целью привязки данных.
  • Значение свойства устанавливается с помощью анимации.

Не все свойства, значения которых устанавливаются платформой WPF, должны быть свойствами зависимостей.Любое свойство CLR с общедоступным геттером и сеттером может быть источником двусторонней привязки данных.

В вашем случае, похоже, вам не нужно свойство зависимости, если вы не используетемодель представления.Вы можете просто сделать это (при условии, что вы внедрили уведомление об изменении свойства в своем классе):

private bool _IsChecked;

public bool IsChecked
{
   get { return _IsChecked; } }
   set
   {
      if (value == _IsChecked)
      {
         return;
      }
      _IsChecked = value;
      WasChecked = WasChecked || value;
      OnPropertyChanged("IsChecked");
   }
}

private bool _WasChecked;

public bool WasChecked
{
   get { return _WasChecked; }
   private set
   {
      if (value == _WasChecked)
      {
         return;
      }
      _WasChecked = value;
      OnPropertyChanged("WasChecked");
   }
}
...