我正在將VB.NET PRISM模塊轉換爲C#。這是一個非常簡單的事情,目前在VB.NET中起作用。它顯示綁定到ViewModel的字符串值。將視圖添加到C#模塊中的RegionManager不起作用
的XAML的視圖(我把它切換到硬編碼文本在努力迫使其顯示,通常它是一個數據綁定控件):
<UserControl x:Class="StatusBarAlarmsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
MinWidth="150">
<Grid>
<TextBlock Text="Garrison" VerticalAlignment="Center"/>
</Grid>
</UserControl>
下面的代碼在VB顯示查看:
regionManager.RegisterViewWithRegion(RegionNames.statusBarRegion,
Function() container.Resolve(Of iSBAlarmsPresenter).view)
我試圖用轉換的C#代碼相同的事情,它看起來像這樣:
this.regionManager.RegisterViewWithRegion(RegionNames.statusBarRegion,
() => new StatusBarAlarmsView());
我已經試過上述C#的重複排列,都沒有成功:
// One
var statusbarRegion = regionManager.Regions[RegionNames.statusBarRegion];
var test = new StatusBarAlarmsView();
test.ViewModel = new AlarmViewModel(this.logger, this.eventAggregator, null,
this.container);
statusbarRegion.Add(test);
// Two
this.regionManager.RegisterViewWithRegion(RegionNames.statusBarRegion,
() => container.Resolve<iSBAlarmsPresenter>().View);
我不會去的查看和視圖模型如何掛鉤的細節,因爲現在我不關心that--我只是想讓它顯示「駐軍」。
附加信息 使用Snoop,我可以深入到StatusBar區域。我可以看到該區域中顯示的其他項目,並且它們都按預期設置了其DataContexts。
但是,使用我的警報模塊時,ContentPresenter沒有繼承的DataContext,它被標記爲Local,它與該區域中的所有其他項目不同。當我嘗試查看最底層的ContentPresenter的DataContext時,我被告知「對象爲NULL」。
儘管如此,我的視圖被加載到樹中,但是我的TextBlock卻沒有顯示,所有這些都在旁邊。
更新 按照要求,在狀態欄地區XAML標記:
<Grid Name="StatusBarGrid" Grid.Row="3" Height="30">
<e:Interaction.Behaviors>
<behaviors:GridHeightModifyOnFontChangeBehavior FontSize="{DynamicResource AppFontSize}"/>
</e:Interaction.Behaviors>
<DockPanel >
<WrapPanel DockPanel.Dock="Right" cal:RegionManager.RegionName="{x:Static inf:RegionNames.statusBarRightRegion}" Orientation="Horizontal" Background="{DynamicResource ControlBackgroundBrush}" />
<StatusBar DockPanel.Dock="Left" cal:RegionManager.RegionName="{x:Static inf:RegionNames.statusBarRegion}" />
</DockPanel>
</Grid>
「附加信息使用Snoop,我可以深入到狀態欄區域,我可以看到該區域中顯示的其他項目,並且它們都按預期設置了其DataContexts。」 您是否在該區域註冊了多個視圖?如果是這樣,只有第一個已註冊的視圖纔會顯示,直到您進行導航。如果沒有,發佈XAML來創建區域會有所幫助。 – TTat
@TTat我用Region標記更新了帖子的底部。此StatusBar區域顯示5個不同的視圖,並排顯示在應用程序窗口的底部。 –
只是澄清。你在做這樣的事情嗎? this.regionManager.RegisterViewWithRegion(RegionNames.statusBarRegion, ()=> new StatusView1()); this.regionManager.RegisterViewWithRegion(RegionNames.statusBarRegion, ()=> new StatusView2()); ... this.regionManager.RegisterViewWithRegion(RegionNames.statusBarRegion, ()=> new StatusBarAlarmsView()); – TTat