2012-02-05 61 views
2

我如何知道某些财产是有约束力的? 例如一个属性(类从NotificationObject Implemeted一个):我如何知道某些财产是有约束力的?

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

使用:

<TextBlock Text={Binding Title}> 

我需要知道什么时候不使用任何属性,以释放配置资源。

回答

2

有知道,如果一个控件绑定到您的视图模型的特定属性没有简单的方法,但你可以知道是否有人预订了PropertyChanged事件(只检查,如果它不为空)。绑定引擎订阅这个事件,所以如果某些东西绑定到ViewModel的至少一个属性上,那么PropertyChanged事件处理程序不会为空。

1

如果你可以告诉别人请求你的财产通过设置一个标志,虽然不知道这是否会满足您的需求:

private bool _isTitleBound = false; 

public string Title 
{ 
    set 
    { 
    _title = value; 

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

    return _title; 
    } 
} 

你也可以考虑延迟实例,这将导致你唯一的一次性对象当属性获取器被调用时被创建。如果属性获取器从不被调用,那么永远不会创建一次性对象。另外,如果这是一次性绑定,请考虑使用惰性实例化来处理对象。例如:

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; 
} 
+0

对不起,我不明白,你在此创建(或获得)对象“MyThing事情= CreateMyThing();”,并在接下来的步骤设置这个对象(事)? – Ivan 2012-02-07 10:26:57

+1

@Ivan是的,对象将被丢弃,但优先级低于绑定和渲染,因此它应该在绑定和显示之前进行绑定和显示。这是有意义的,如果它是一次性的绑定,即它没有属性改变通知本身。如果这会造成问题,我将需要更多关于您的应用程序如何工作的信息。第一个简单的标志解决方案,或懒惰的实例可能对你有用。 – 2012-02-07 10:31:18