1

Prism4を使用してSilverlight4アプリケーションを構築しました。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>

ありがとうございました!

4

2 に答える 2

0

MVVMを使用すると、ラベルを基になる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

于 2011-03-10T12:11:50.913 に答える
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を介して現在のリージョンマネージャーをインポートするすべての場所で使用できます。

于 2011-03-11T11:40:13.447 に答える