WPF,Prism / Unity - 绑定异常

时间:2016-05-19 20:17:20

标签: c# wpf mvvm binding unity-container

我正在开发这种类型的C#应用​​程序: WPF / Prism / Unity(MVVM,区域,模块化,Telerik RadDocking控件的自定义RegionAdapterBase(在RadDocking级别,NOT窗格组级别)和窗格工厂,用于映射选项卡应该位于哪个窗格组(左下方)出现)。

问题:

除了DocumentHost,一切都很好。我可以把文件显示在那里,但他们最终都有相同的标题。你能帮我理解为什么会这样吗?

更多背景信息:

对于DocumentHost中的所有文档,我有一个引用视图/视图模型的模块。该视图具有一个文本框,用于通过数据网格查询文本框中查询返回的表数据。想想SQL Server Mgmt Studio,右键单击一个表,然后选择select来查看表中的数据。

screenshot

当用户右键单击一个表时,我有一个命令绑定到“资源管理器”窗格中的上下文菜单“选择数据”选项,该命令包含以下代码:

_container.Resolve<SqlAndDataGridModule>(new DependencyOverride<IConversionExplorerObject>(obj)).Initialize();

“obj”是什么?我正在尝试将我单击的表的名称传递给文档模块,以便我可以设置选项卡标题。同样,除了“覆盖所有标签标题”问题之外,这也有效。所有标签都标题为我打开的最新标签。

所以SqlAndDataGridModule有一个初始化,我在其中执行此操作:

public void Initialize()
{
    // Register view and view model types
    _container.RegisterType<SqlAndDataGrid>();
    _container.RegisterType<ISqlAndDataGridView_ViewModel, SqlAndDataGridView_ViewModel>();

    // Create a view model
    SqlAndDataGridView_ViewModel s = new SqlAndDataGridView_ViewModel(_repository, _eventAggregator, _manager);

    // Set the property TabTitle to table's name
    // This property is bound to RadDocumentPane's header
    s.TabTitle = ((ConversionExplorerObject)_explorerObject).Name;

    // Create view and inject the view model with the tab title
    SqlAndDataGrid sv = _container.Resolve<SqlAndDataGrid>(new DependencyOverride<ISqlAndDataGridView_ViewModel>(s));

    // Register the instance in the container
    _container.RegisterInstance(s.TabTitle, sv);

    // Register the view with the DockRegion
    _manager.RegisterViewWithRegion(RegionNames.DockRegion, () => _container.Resolve<SqlAndDataGrid>(s.TabTitle));
}

我已经确认我正在创建单独的视图和视图模型,我甚至可以在调试器中看到不同的选项卡标题。但似乎在绑定到窗格标题的某处,出现了问题。

我认为这是一个具有约束力的问题而不是Telerik问题,这就是为什么我在这里张贴而不是在那里。任何帮助表示赞赏,如果能提供帮助,我将很乐意提供更多信息。谢谢,克里斯

1 个答案:

答案 0 :(得分:0)

我想出了我的问题。如果这有助于任何人,我的问题是在我的SqlAndDataGridModule的视图模型中,我订阅了&#34;选择所有行&#34;事件。这意味着视图模型的每个实例(每个选项卡一个)都订阅了该事件,并且每个视图模型都绑定到新选择的资源管理器对象。

我应该只从shell的视图模型中订阅,因为那是我实例化SqlAndDataGridModule(及其视图/ viewmodel)的新实例的地方。故事的道德 - 警惕发布的事件以及您如何订阅它们。