我用Prism4构建了一个Silverlight 4应用程序。我在shell.xaml中创建了几个内容区域,一切正常。现在我想做以下事情: 在shell.xaml中,我们在布局中有一个标题栏(在那里有一个标签,如下所示)。在那里,我们希望根据主要内容区域中显示的视图动态更改标题字符串的值。 关于如何以简单的方式实现这一目标的任何想法?
<sdk:Label Content="Should be dynamic" FontWeight="SemiBold" Grid.ColumnSpan="3" Grid.Row="0" Grid.Column="2" BorderThickness="0" Background="{StaticResource DetailHeaderBackground}" ></sdk:Label>
谢谢!
答案 0 :(得分:0)
使用MVVM,您可以将Label连接到底层的ViewModel,然后在更改视图时更新属性:
<sdk:Label
Content="{Binding ViewModel.HeaderBarLabelText, Mode=OneWay}"
FontWeight="SemiBold"
Grid.ColumnSpan="3"
Grid.Row="0"
Grid.Column="2"
BorderThickness="0"
Background="{StaticResource DetailHeaderBackground}" >
</sdk:Label>
然后在底层模型中
[ViewModelProperty(null)]
public int HeaderBarLabelText
{
get
{
return _headerBarLabelText;
}
set
{
_headerBarLabelText= value;
OnPropertyChanged(() => HeaderBarLabelText);
}
}
如果您的“内容区域”/“视图”是Prism模块,则会变得更复杂,在这种情况下,CodeProject上的Prism教程涵盖了大多数基础。
http://www.codeproject.com/KB/silverlight/PrismTutorial_Part1.aspx
答案 1 :(得分:0)
由于我使用由棱镜模块的导出视图填充的PRISM区域,我现在就这样做了:
public static void AddLabelToHeaderRegion(string HeaderName, IRegionManager regionManager)
{
Label headerLabel = new Label
{
Content = HeaderName,
FontWeight = System.Windows.FontWeights.SemiBold,
Background = (System.Windows.Media.Brush)Application.Current.Resources["DetailHeaderBackground"],
Padding = new Thickness(30, 3, 0, 3),
BorderThickness = new Thickness(0),
Margin = new Thickness(0)
};
Grid.SetColumn(headerLabel, 2);
Grid.SetRow(headerLabel, 0);
Grid.SetColumnSpan(headerLabel, 3);
IRegion headerBarRegion = regionManager.Regions[RegionNames.HeaderBarRegion];
if (headerBarRegion != null)
{
foreach (var item in headerBarRegion.ActiveViews)
{
headerBarRegion.Remove(item);
}
headerBarRegion.Add(headerLabel);
}
}
我可以在任何地方使用它,我通过MEF导入当前的区域管理器。