我一直在尝试使用复合应用程序库(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 ...
}
}
答案 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 );
}
}