我正在开发这种类型的C#应用程序: WPF / Prism / Unity(MVVM,区域,模块化,Telerik RadDocking控件的自定义RegionAdapterBase(在RadDocking级别,NOT窗格组级别)和窗格工厂,用于映射选项卡应该位于哪个窗格组(左下方)出现)。
问题:
除了DocumentHost,一切都很好。我可以把文件显示在那里,但他们最终都有相同的标题。你能帮我理解为什么会这样吗?
更多背景信息:
对于DocumentHost中的所有文档,我有一个引用视图/视图模型的模块。该视图具有一个文本框,用于通过数据网格查询文本框中查询返回的表数据。想想SQL Server Mgmt Studio,右键单击一个表,然后选择select来查看表中的数据。
当用户右键单击一个表时,我有一个命令绑定到“资源管理器”窗格中的上下文菜单“选择数据”选项,该命令包含以下代码:
_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问题,这就是为什么我在这里张贴而不是在那里。任何帮助表示赞赏,如果能提供帮助,我将很乐意提供更多信息。谢谢,克里斯
答案 0 :(得分:0)
我想出了我的问题。如果这有助于任何人,我的问题是在我的SqlAndDataGridModule的视图模型中,我订阅了&#34;选择所有行&#34;事件。这意味着视图模型的每个实例(每个选项卡一个)都订阅了该事件,并且每个视图模型都绑定到新选择的资源管理器对象。
我应该只从shell的视图模型中订阅,因为那是我实例化SqlAndDataGridModule(及其视图/ viewmodel)的新实例的地方。故事的道德 - 警惕发布的事件以及您如何订阅它们。