我怎么知道某些财产有约束力?

时间:2012-02-05 14:22:59

标签: wpf binding properties

我怎么知道某些财产有约束力? 例如,一个属性(从NotificationObject实现的类):

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

使用:

<TextBlock Text={Binding Title}>

我需要知道任何人何时不使用财产来释放处置资源。

2 个答案:

答案 0 :(得分:2)

没有简单的方法可以知道控件是否绑定到 ViewModel的特定属性,但是您可以知道某人是否订阅了PropertyChanged事件(只是检查它是否是不是空的)。绑定引擎订阅此事件,因此如果某些内容绑定到ViewModel的至少一个属性,则PropertyChanged事件处理程序将不为null。

答案 1 :(得分:1)

您可以通过设置标志来判断某人是否已请求您的财产,但不确定这是否符合您的需求:

private bool _isTitleBound = false;

public string Title
{
  set
  {
    _title = value;

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

    return _title;
  }
}

您还可以考虑延迟实例化,这会导致只在调用属性getter时创建一次性对象。如果永远不会调用属性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;
}