Silverlight 4 + Prism добавляет динамическую строку в строку заголовка в оболочке

Я создал приложение Silverlight 4 с помощью Prism4. Я создал несколько областей содержимого в 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>

Спасибо!


person hoetz    schedule 10.03.2011    source источник


Ответы (2)


Используя 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, и в этом случае учебник Prism по CodeProject охватывает большинство баз.

http://www.codeproject.com/KB/silverlight/PrismTutorial_Part1.aspx

person h_a_z_    schedule 10.03.2011
comment
Да, регионы заполнены (MEF-) экспортированными видами модуля Prism. - person hoetz; 10.03.2011

Поскольку я использую области 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.

person hoetz    schedule 11.03.2011