0

好的,我正在尝试了解 WPF 和流行的 MVVM 模式。

现在我有这个问题。我正在使用带有多个选项卡的功能区控件。在我的 ViewModel 中,我有一个属性“ActiveTab(字符串)”,它应该反映当前活动的选项卡。

由于ribboncontrol 没有任何显示此信息的属性,因此我无法绑定到它。

所以我在想:

我可以像这样绑定选定的事件:

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

然后在代码隐藏中使用 Activetab = sender.Label 在视图模型中设置属性

但是然后我需要在我的视图的代码隐藏中引用我的视图模型。

我试图在不使用任何代码隐藏文件的情况下解决这个问题。(MVVM)。

现在真正的问题 是:是否有可能使用事件触发器或事件设置器。当所选事件被解雇时。setter 自动将 activetab 属性设置为 sender.Label 值?

仅使用 xaml。

- 我为我的英语相当糟糕而且可能是noobish问题的借口。我是 wpf 的新手 =)


更新: 正如我刚刚发现的那样,ribbonTab 上有一个 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 在我的视图模型中,而不是在ribbonTab ...

我如何制作设置器,使用选项卡的值在我的视图模型上设置属性?=)

提前致谢!!

4

2 回答 2

1

Microsoft Ribbon 的 8 月版本,RibbonTab 具有 IsSelected 依赖属性,因此您应该能够绑定到它。

于 2010-09-14T10:58:28.277 回答
0

我很惊讶 RibbonControl 没有将它公开为可绑定属性,但我并没有真正使用它,所以我假设你是对的......

您只能对依赖属性进行绑定或从依赖属性绑定,如果功能区没有活动的选项卡依赖属性,那么您需要自己创建一个。您可以通过将功能区控件子类化为您自己的控件、向其添加属性并使用 Selected 事件处理程序来更新其值来执行此操作。另一方面,如果您只在一个视图上使用它,那么您可以将属性添加到视图而不是子类化功能区并绑定到该视图。

无论哪种方式,您都需要将当前选定的选项卡放入绑定引擎,以便能够将任何内容绑定到它(标签或视图模型),并且它只能通过依赖属性进入引擎。因此,您将无法完全在 XAML 中执行此操作,但您可以在不引入视图和视图模型之间的耦合的情况下执行此操作。


查看用于 WPF 的 Microsoft 功能区控件的文档,您是否尝试过 Ribbon.SelectedItem 属性?在我看来,它应该为您提供当前选择的选项卡。

于 2010-09-14T10:39:06.277 回答