Wpf Prism/MEF在同一视图中加载不同的数据(非共享)
我使用Prism和MEF创建了一个WPF应用程序。 在一个模块中,我有一个客户列表。要编辑客户数据,我有一个视图“EditCustomer.xaml” 用户可以编辑许多客户,因此可以打开EditCustomer.xaml的许多不同实例 以下是ViewModel的代码:Wpf Prism/MEF在同一视图中加载不同的数据(非共享),wpf,data-binding,mvvm,prism,mef,Wpf,Data Binding,Mvvm,Prism,Mef,我使用Prism和MEF创建了一个WPF应用程序。 在一个模块中,我有一个客户列表。要编辑客户数据,我有一个视图“EditCustomer.xaml” 用户可以编辑许多客户,因此可以打开EditCustomer.xaml的许多不同实例 以下是ViewModel的代码: [Export(typeof(EditCustomerViewModel))] [PartCreationPolicy(CreationPolicy.NonShared)] public class EditCustomerVie
[Export(typeof(EditCustomerViewModel))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public class EditCustomerViewModel : ViewModelBase
以及XAML的代码:
[Export(typeof(EditCustomerView))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class EditCustomerView : RadPane
{
public EditCustomerView()
{
InitializeComponent();
}
[Import(typeof(EditCustomerView))]
public object ViewModel
{
get
{
return this.DataContext;
}
set
{
this.DataContext = value;
}
}
}
“CreationPolicy.NonShared”属性工作得很好,但是当我想绑定客户数据时,每个视图都绑定了最后的值。
我只想在新视图实例中加载和显示最新数据
怎么可能呢?也许我忘了什么
首先,谢谢你的帮助
关于。我有一个菜单,通过单击项目加载视图,此代码来自我的ShellViewModel:
private void ShowView(object viewName)
{
IRegion region = this.regionManager.Regions[RegionConstants.CentralRegionName];
object view = null;
try
{
switch (viewName as string)
{
case ViewConstants.CustomerListViewName:
view = ServiceLocator.Current.GetInstance<CustomerListView>();
break;
default:
return;
}
if (region.Views.Contains(view))
{
region.Remove(view);
}
region.Add(view);
region.Activate(view);
}
private void ShowView(对象视图名称)
{
IRegion region=this.regionManager.Regions[RegionConstants.CentralRegionName];
对象视图=空;
尝试
{
开关(viewName为字符串)
{
案例ViewConstants.CustomerListViewName:
view=ServiceLocator.Current.GetInstance();
打破
违约:
返回;
}
if(region.Views.Contains(视图))
{
区域。移除(视图);
}
区域。添加(视图);
区域。激活(视图);
}
在每个模块的行为中,我可以从上下文菜单加载其他视图,如下所示:
IRegionManager regionManager = ServiceLocator.Current.GetInstance<IRegionManager>();
IRegion region = regionManager.Regions[RegionConstants.CentralRegionName];
object view = null;
switch (header)
{
case "Update":
view = ServiceLocator.Current.GetInstance<UpdateCustomerView>();
IEventAggregator eventAggregator = ServiceLocator.Current.GetInstance<IEventAggregator>();
eventAggregator.GetEvent<UpdateCustomerEvent>().Publish(new UpdateCustomerEvent { ID = custId});
break;
default:
break;
}
if (view != null)
{
if (region.Views.Contains(view))
{
region.Remove(view);
}
region.Add(view);
region.Activate(view);
}
IRegionManager regionManager=ServiceLocator.Current.GetInstance();
IRegion region=regionManager.Regions[RegionConstants.CentralRegionName];
对象视图=空;
开关(收割台)
{
案例“更新”:
view=ServiceLocator.Current.GetInstance();
IEventAggregator eventAggregator=ServiceLocator.Current.GetInstance();
eventAggregator.GetEvent().Publish(新的UpdateCustomerEvent{ID=custId});
打破
违约:
打破
}
如果(视图!=null)
{
if(region.Views.Contains(视图))
{
区域。移除(视图);
}
区域。添加(视图);
区域。激活(视图);
}
如果使用[ImportingContractor]会发生什么情况而不是使用属性导入?我认为问题来自我的EventAggregator:-当我想打开视图编辑客户数据时,我调用一个事件聚合器来加载视图中的数据-我重用同一个视图来创建和编辑,所以..也许事件聚合器在调用时会更新每个视图实例?