gpt4 book ai didi

.net - 在 C# 模块中向 RegionManager 添加 View 不起作用

转载 作者:行者123 更新时间:2023-12-03 10:16:13 25 4
gpt4 key购买 nike

我正在将 VB.NET PRISM 模块转换为 C#。这是一个非常简单的事情,目前在 VB.NET 中工作。它显示绑定(bind)到 ViewModel 的字符串值。

View 的 XAML(我将其切换为硬编码文本以强制其显示,通常它是一个数据绑定(bind)控件):

<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 中用于显示 View :
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);

我不会详细介绍 View 和 ViewModel 是如何连接的,因为目前我并不关心这一点——我只是希望它显示“Garrison”。

附加信息
使用 Snoop,我可以深入到 StatusBar 区域。我可以看到该区域中显示的其他项目,并且它们都按预期设置了 DataContexts。

然而,对于我的警报模块,ContentPresenter 没有继承的 DataContext,它被标记为 Local,这与该区域中的所有其他项目不同。当我尝试查看最底部 ContentPresenter 的 DataContext 时,我被告知“对象为 NULL”。

但是,所有这些都不是重点,因为我的 View 正在加载到树中,但我的 TextBlock 没有显示。

更新
根据要求,StatusBar 区域的 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>

最佳答案

是在 StatusBarAlarmsView 的构造函数中调用 InitializeComponent 方法吗?

添加 View 时的一个常见错误(特别是如果您需要修改这些 View 的构造函数)是忘记调用 InitializeComponent 方法。这个方法“告诉” View 创建和渲染它的内部组件。如果它没有被调用,你通常会发现你的 View 看起来是空的,因为它的组件从未被创建。

关于.net - 在 C# 模块中向 RegionManager 添加 View 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21268727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com