Как я могу узнать, что какое-то свойство было обязательным? - PullRequest
2 голосов
/ 05 февраля 2012

Как я могу узнать, что какое-то свойство было обязательным?Например, свойство (класс реализован из NotificationObject):

public string Title
{
  set
  {
    _title=value;
    this.RaisePropertyChanged(() => this.Title);
  }
  get
  {
    return _title;
  }
}

Использование:

<TextBlock Text={Binding Title}>

Мне нужно знать, когда свойство никем не используется для освобождения ресурсов утилизации.

Ответы [ 2 ]

2 голосов
/ 05 февраля 2012

Нет простого способа узнать, связан ли элемент управления с конкретным свойством вашей ViewModel, но вы можете узнать, подписан ли кто-либо на событие PropertyChanged (просто проверьте, не является ли оно нулевым) , Механизмы привязки подписываются на это событие, поэтому, если что-то связано хотя бы с одним свойством вашей ViewModel, обработчик события PropertyChanged не будет иметь значение null.

1 голос
/ 05 февраля 2012

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

private bool _isTitleBound = false;

public string Title
{
  set
  {
    _title = value;

    this.RaisePropertyChanged(() => Title);
  }
  get
  {
    _isTitleBound = true;

    return _title;
  }
}

Вы также можете рассмотреть ленивый экземпляр, который приведет к вашим одноразовым объектамсоздается только при вызове свойства getter.Если получатели свойства никогда не называются, ваши одноразовые объекты никогда не будут созданы.Кроме того, если это однократная привязка, подумайте об использовании отложенного создания экземпляров с утилизацией вашего объекта.Например:

public MyThing Thing
{
  get
  {
    MyThing thing = CreateMyThing();

    Dispatcher.CurrentDispatcher.BeginInvoke(
      DispatcherPriority.Background,
      new Action(() => thing.Dispose());

    return thing;
  }
}

private MyThing CreateMyThing()
{
  //create and return MyThing instance;
}
...