我正在开发一个这种类型的C#应用程序: WPF/Prism/Unity (MVVM、regions、模块化、用于Telerik RadDocking控件的自定义RegionAdapterBase (在RadDocking级别,而不是窗格组级别)和窗格工厂,用于映射哪个窗格组(左下)应该出现选项卡)。
问题:
除了DocumentHost,一切都很好。我可以让文档出现在那里,但它们最终都有相同的标签标题。你能帮我理解为什么会这样吗?
更多背景信息:
对于DocumentHost中的所有文档,我有一个引用视图/视图模型的模块。视图有一个文本框,用于查询文本框中查询返回的表数据的数据。考虑一下,右键单击一个表并选择选择查看表中的数据。
屏幕截图
当用户右击一个表时,我有一个命令绑定到"Explorer“窗格中的上下文菜单"Select”选项,该命令包含以下代码:
_container.Resolve<SqlAndDataGridModule>(new DependencyOverride<IConversionExplorerObject>(obj)).Initialize();"obj“是什么意思?我正在尝试将我单击的表的名称传递给document模块,以便设置选项卡标题。同样,除了“覆盖所有标签标题”问题外,这是可行的。所有标签都以我最近打开的标签命名。
因此,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问题,这就是为什么我在这里而不是那里张贴。任何帮助都很感激,如果有帮助的话,我很乐意提供更多的信息。谢谢,克里斯
发布于 2016-05-20 15:19:59
我解决了我的问题。如果这对任何人都有帮助,我的问题是,在我的SqlAndDataGridModule的视图模型中,我订阅了"select all rows“事件。这意味着视图模型的每个实例(每个选项卡一个)都订阅了事件,并且每个视图模型都绑定到新选择的资源管理器对象。
我应该只订阅shell的视图模型,因为在那里我实例化了SqlAndDataGridModule的一个新实例(以及它的视图/视图模型)。故事的寓意--当心什么事件被发表了,以及你如何订阅它们。
https://stackoverflow.com/questions/37333211
复制相似问题