Непосредственно перед загрузкой содержимого функциональной единицы в главное окно диспетчер документов позволяет размещать элементы управления, специфичные для загружаемого представления, в панели инструментов и статуса главного окна. Для использования этих возможностей необходимо реализовать в презентере интерфейс IToolBarProvider – для размещения элементов в панели инструментов и IStatusBarProvider – для размещения элементов в панели статуса.

Рассмотрим на примере добавление элементов в панель инструментов (добавление элементов в панель статуса выполняется аналогично).

Сами элементы, которые планируется разместить в панели статуса главного окна мы разместим непосредственно в представлении функциональной единицы:

<UserControl x:Class="ModuleWithMenu.TestForm.TestFormView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="300"
d:DesignWidth="300"
mc:Ignorable="d">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<ToolBar Name="MyToolBar" Visibility="Collapsed">
<Button Content="Test button" />
</ToolBar>

</Grid>
</UserControl>

Элементы панели статуса умышленно сделаны скрытыми в самом представлении (<ToolBar Name="MyToolBar" Visibility="Collapsed">), чтобы не дублировать панели инструментов главного окна и представления.

Код презентера функциональной единицы:

internal class TestFormPresenter : PresenterBase<TestFormView, TestFormViewModel>, IToolBarProvider
{
public ReadOnlyCollection<FrameworkElement> ToolBarItems { get; private set; }

protected override void OnViewSet()
{
base.OnViewSet();
ThreadHelper.SafeCall(() =>
{
ToolBarItems =
new ReadOnlyCollection<FrameworkElement>(View.MyToolBar.Items.Cast<FrameworkElement>().ToList());
});
}

В коде мы реализуем интерфейс IToolBarProvider и указываем в качестве значения его свойства ToolBarItems содержимое нашей панели инструментов в представлении.

Теперь при загрузке нашей функциональной единицы в панель инструментов будут добавляться элементы управления, расположенные в панели инструментов нашего представления (в данном случае добавляется Test Button):

image

В принципе, ничего не мешает нам создавать элементы управления для панели инструментов непосредственно в коде. Но проектировать его визуально немного приятней Улыбка

Last edited Feb 5, 2014 at 8:04 AM by Maxxtor, version 2