我怎么知道某些财产有约束力? 例如,一个属性(从NotificationObject实现的类):
public string Title
{
set
{
_title=value;
this.RaisePropertyChanged(() => this.Title);
}
get
{
return _title;
}
}
使用:
<TextBlock Text={Binding Title}>
我需要知道任何人何时不使用财产来释放处置资源。
答案 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;
}