使用Silverlight中的PRISM模式重新绑定控件

时间:2010-06-24 15:52:03

标签: c# silverlight-3.0 prism

我一直在尝试使用复合应用程序库(Prism),我已经设置了一个非常标准的模式,我已经遵循了微软的教程。基本上,View被注入Region。视图是动态构建的,以编程方式添加控件等。

我有一个被触发的命令,并且在回发时我想重新绑定当前视图上的控件,而不是完全重新渲染所有控件。

所以我尝试使用更新版本更新模型,希望这会强制重新绑定控件。这不起作用。不知道我应该采取什么方法,因为我是Prism的新手......

有什么想法吗?

订阅活动以处理回发

IEventAggregator aggregator = this.Container.Resolve<IEventAggregator>();
aggregator.GetEvent<DataInstanceLoadedEvent>().Subscribe(this.OnDataInstanceUpdated);

事件的实施

public void OnDataInstanceUpdated(DataInstance updatedInstance)
{
    if(this.View.Model != null){
       // We need to rebind here 
       IRegion region = this.LocateRegion(this.View); // gets the region....
       this.View.Model.CurrentDataInstance = updatedInstance; // update the model instance
    }
    else{
       // Render all controls over again since view.model is null ...
    } 
}

1 个答案:

答案 0 :(得分:0)

我已经想出了如何根据微软建议的模式重新绑定。

基本上,我所要做的就是从我的模型继承INotifyPropertyChanged

然后遵循这种模式,一旦我的模型更新,它就会被强制通过触发一个事件来重新绑定所有控件,该事件通知客户端该属性实际上已经发生了变化。

public class MyModel : INotifyPropertyChanged
{
    private DataInstance currentDataInstance;
    public event PropertyChangedEventHandler PropertyChanged;
    public DataInstance CurrentDataInstance
    {
        get
        {
            return this.currentDataInstance;
        }
        set
        {
            if ( this.currentDataInstance == value )
                return;
            this.currentDataInstance = value;
            this.OnPropertyChanged( new PropertyChangedEventArgs("CurrentDataInstance"));
        }
    }
    protected virtual void OnPropertyChanged( PropertyChangedEventArgs e )
    {
        if ( this.PropertyChanged != null )
            this.PropertyChanged( this, e );
    }
}