MVVM WPF: Отражение свойства элементов управления для модели представления при срабатывании событий - PullRequest
0 голосов
/ 14 сентября 2010

Хорошо, я пытаюсь понять WPF и популярный шаблон MVVM.

Теперь у меня есть эта проблема.Я использую элемент управления ленты с несколькими вкладками.В моей ViewModel у меня есть свойство "ActiveTab (строка)", которое должно отражать активную в данный момент вкладку.

Поскольку у ленты управления нет свойства, отображающего эту информацию, я не могу с ней связаться.

Итак, я подумал:

Я мог бы связать выбранное событие следующим образом:

        <r:RibbonTab Label="tab1" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab2" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab3" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab4" Selected="RibbonTab_Selected"></r:RibbonTab>
        <r:RibbonTab Label="tab5" Selected="RibbonTab_Selected"></r:RibbonTab>

Затем в codebehind установить свойство в viewmodel, используя Activetab = sender.Label * 1012.*

Но тогда мне понадобится ссылка на мою модель представления в коде позади моего представления.

Я пытаюсь решить эту проблему без использования какого-либо кода позади файлов.(MVVM).

Теперь реальный вопрос: Возможно ли как-то использовать триггер событий или установщик событий.что, когда выбранное событие запускается.Сеттер автоматически устанавливает для свойства activetab значение sender.Label?.

Использование только xaml.

- Мои извинения за мой довольно плохой английский и, возможно, нубистский вопрос.Я очень новичок в wpf =)


ОБНОВЛЕНИЕ: Как я только что узнал, на ленте Tab есть свойство isSelected.

Теперь у меня естьнекоторые вопросы о том, как связать его со свойством в моей модели представления.

Я попробовал следующий код:

<Style TargetType="{x:Type r:RibbonTab}">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="{Binding SelectedTab}" Value="{Binding RelativeSource=Self, Path=Label}" />
                    </Trigger>
                </Style.Triggers>
            </Style>

Но это не работает:

Error   1   Cannot find the Style Property 'SelectedTab' on the type 'Microsoft.Windows.Controls.Ribbon.RibbonTab'. 

SelectedTab offcourse находится в моей viewmodel, а не в ribbonTab ...

Как я могу сделать установщик, установить свойство на моей viewmodel со значением вкладки?=)

Заранее спасибо !!

Ответы [ 2 ]

1 голос
/ 14 сентября 2010

В августовской версии Microsoft Ribbon RibbonTab имеет свойство зависимостей IsSelected, так что вы должны иметь возможность связываться с ним.

0 голосов
/ 14 сентября 2010

Я удивлен, что RibbonControl не выставляет это как привязываемое свойство, но я на самом деле не использовал его, поэтому я предполагаю, что вы правы ...

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

В любом случае вам нужно вставить выбранную в данный момент вкладку в механизм привязки, чтобы иметь возможность связать с ней что угодно (либо метку, либо модель представления), и она может попасть в механизм только через свойства зависимостей. Таким образом, вы не сможете сделать это полностью в XAML, но вы сможете сделать это без введения связи между view и viewmodel.


Глядя на документацию по элементу управления ленты Microsoft для WPF, пробовали ли вы свойство Ribbon.SelectedItem? Мне кажется, что он должен дать вам выбранную вкладку.

...