我需要一个视图的所有孩子都知道一条上下文信息(他们需要展示的人)。我还需要与 MVVM 兼容的方法。我尝试在我的 Prism 应用程序中使用 RegionContext 执行此操作。这是我的方法和问题:
我有一个 TabControl,我使用 View Injection 填充视图,以便可以填充 RegionContext:
从 Shell.xaml:
<TabControl DockPanel.Dock="Right" cal:RegionManager.RegionName="TabRegion">
这是我的注射
//Create an instance of ContactView.xaml
contactView = CreateContactView(contact);
_regionManager.Regions["TabRegion"].Add(contactView, contactKey, true);
//"contact" being a simple entity of type Contact
RegionManager.SetRegionContext(contactViewb, contact);
我期望能够使用附加属性通过 RegionManager.RegionContext 附加属性从作为该 DependencyObject (ContactView.xaml) 的子控件的任何控件获取 RegionContext 的值:
来自 ContactView.xaml
<TextBlock Text="{Binding
RelativeSource={RelativeSource Self},
Path=(cal:RegionManager.RegionContext)}"/>
但这不起作用......我必须找到 ContactView.xaml 才能让它工作:
<TextBlock Text="{Binding
RelativeSource={RelativeSource
Mode=FindAncestor,
AncestorType={x:Type views:ContactView}},
Path=(cal:RegionManager.RegionContext)}"/>
这很好,但是我将允许模块将视图加载到 ContactView 中,我希望它们不必了解任何有关 ContactView 的信息。
我想我的问题确实是,您如何期望加载具有大量控件和区域的复杂视图并让它们都共享一个上下文数据?
这样做的正确方法是什么?范围容器?编写一个新的附加属性,在控件层次结构上运行以查找 RegionContext(呃)?我没有正确使用 RegionContext?我对任何事情都持开放态度。建议离开。