Fluent Ribbon SelectedTabItem或SelectedTabIndex

问题描述 投票:0回答:1

我正在使用带有View / ViewModel的MVVM设计模式中的Fluent Ribbon。我的目标是根据选择的选项卡更改主体。我可以使用SelectedTabItem或SelectedTabIndex并查找相应的视图。但是,选项卡选择更改时,均不会触发。在视图中,我有...

<Fluent:Ribbon Grid.Row="0" SelectedTabItem="{Binding SelectedRibbonTab}" SelectedTabIndex="{Binding SelectedRibbonTabIndex}">
</Fluent:Ribbon>
<ContentControl Grid.Row="1" Content="{Binding RibbonTabContent}"/>

在ViewModel中,我有...

    // Used both Item and Index for troubleshoothing, but need only one or the other for implementation

    private IDictionary<string, FrameworkElement> RibbonTabViews;
    private List<FrameworkElement> RibbonTabViewsList;

    public RibbonTabItem SelectedRibbonTab
    {
        get 
        { 
            return selectedRibbonTab;
        }
        set
        {
            Update(() => SelectedRibbonTab, ref selectedRibbonTab, value, false);
            UpdateContentControl();
        }
    }

    public int SelectedRibbonTabIndex
    {
        get
        {
            return selectedRibbonTabIndex;
        }
        set
        {
            Update(() => SelectedRibbonTabIndex, ref selectedRibbonTabIndex, value, false);
            UpdateContentControl(value);
        }
    }

    public FrameworkElement RibbonTabContent
    {
       get { return ribbonTabContent; }
       set { Update(() => RibbonTabContent, ref ribbonTabContent, value, false); }
    }

    protected void UpdateContentControl()
    {
        RibbonTabContent = RibbonTabViews[SelectedRibbonTab.Header.ToString()];
    }

    protected void UpdateContentControl(int index)
    {
        RibbonTabContent = RibbonTabViewsList[index];
    }

我知道我不需要两个绑定,但是为了进行故障排除,我同时拥有Item和Index。我认为每次更改选项卡时,都会在ViewModel中调用SelectedRibbonTab和SelectedRibbonTabIndex。不幸的是,事实并非如此。我在每个setter和getter处都有断点,并且在更改选项卡时都不会命中。我想念什么?多年来,我一直在Microsoft Ribbon中使用这种方法,但是由于某些原因,这些方法在Fluent Ribbon中不起作用。任何帮助都将非常有用,谢谢。

wpf mvvm ribbon fluent fluent-ribbon
1个回答
0
投票

您必须将绑定模式设置为TwoWay才能在ViewModel中获取更新的值。

© www.soinside.com 2019 - 2024. All rights reserved.