Silverlight 4 + Prism将动态字符串添加到shell中的标题栏

时间:2011-03-10 09:55:49

标签: silverlight prism prism-4

我用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>

谢谢!

2 个答案:

答案 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导入当前的区域管理器。