Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf Prism/MEF在同一视图中加载不同的数据(非共享)_Wpf_Data Binding_Mvvm_Prism_Mef - Fatal编程技术网

Wpf Prism/MEF在同一视图中加载不同的数据(非共享)

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

我使用Prism和MEF创建了一个WPF应用程序。 在一个模块中,我有一个客户列表。要编辑客户数据,我有一个视图“EditCustomer.xaml”

用户可以编辑许多客户,因此可以打开EditCustomer.xaml的许多不同实例

以下是ViewModel的代码:

[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:-当我想打开视图编辑客户数据时,我调用一个事件聚合器来加载视图中的数据-我重用同一个视图来创建和编辑,所以..也许事件聚合器在调用时会更新每个视图实例?