你是如何填充这两个区域的?您的“父”视图是否明确地在其上调用regionManager.RequestNavigate()
,或者是否在应用程序启动期间使用regionManager.RegisterViewWithRegion()
“修复”了区域到其视图?
对于前者,您的父视图可以(比如说)生成一个GUID,并在调用RequestNavigate()
时使用上下文参数将其传递给子视图。视图可以在OnNavigatedTo()内抓取这个值。如果使用EventAggregator,则可以将GUID作为消息对象的属性公开,并且在订阅时使用谓词方法重载,因此图视图仅接收包含期望GUID的消息。
如果您使用的是RegisterViewWithRegion
,事情会变得更加棘手。我知道你可以在该地区的XAML设置上下文值,所以下面的GUID的想法,并假设VM自曝称为MyViewGuid
通过属性生成的GUID值: -
<ContentControl Regions:RegionManager.RegionName="Foo"
Regions:RegionManager.RegionContext="{Binding MyViewGuid}"/>
我还没有找到一个简单的方法将该上下文值赋予子视图模型(因为在这种情况下他们的INavigationAware方法不会被调用)。我用了一个哈克方法 - 在孩子的意见的构造,设置更改到父区域的背景值的事件处理程序: -
var regionContext = RegionContext.GetObservableContext(this);
regionContext.PropertyChanged += RegionContextOnPropertyChanged;
事件处理会是这样的,把我的头顶部: -
private void RegionContextOnPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
{
var observableObject = sender as ObservableObject<object>;
if (observableObject != null && observableObject.Value != null)
{
// Get the GUID value from the context and pass to the VM
// (assuming the VM has a method called SetGuid().
var myGuid = (Guid)observableObject.Value;
(DataContext as MyViewModel).SetGuid(myGuid);
}
}
希望我已经建议的东西可能是有用的......!
您是否检查“RegionContext”属性是否有帮助?它在类似的问题上被证明是有用的。 –