我需要一个视图的所有子级都知道一些上下文信息(他们需要展示的人)。我还需要这种方法与MVVM兼容。我尝试在我的Prism应用程序中使用RegionContext来实现此目的。以下是我的方法和问题:
我有一个TabControl,我使用View Injection来填充它以便可以填充RegionContext:
从Shell.xaml:
但这并不起作用...我必须找到ContactView.xaml才能使其正常工作:
这很好,但我将允许模块加载视图到ContactView中,我希望它们不必知道任何关于ContactView的信息。我的问题是,如何加载具有许多控件和区域并使它们都共享一个上下文数据的复杂视图?什么是正确的方法?作用域容器?编写一个新的附加属性,运行控件层次结构以查找RegionContext(呃)?我没有正确使用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);
我预期的是能够使用附加属性从任何作为该DependencyObject(ContactView.xaml)的子控件中获取RegionContext的值,方法是通过RegionManager.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?我接受任何建议。