你是如何填充這兩個區域的?您的「父」視圖是否明確地在其上調用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」屬性是否有幫助?它在類似的問題上被證明是有用的。 –