1

我正在开发一个WPF项目,现在我正在研究功能区区域

功能区内部,我有一些控件,例如RibbonComboBox,RibbonTextBox等。

我有几个RibbonTabRibbon所以我为每个 RibbonTab 设置了一个视图模型,如下所示:

<rb:Ribbon Name="Ribbon">

        <rb:RibbonTab Header="Tab One" Name="tab1">

            <rb:RibbonTab.DataContext>
                <vm:TabOneViewModel />
            </rb:RibbonTab.DataContext>

因此,这些选项卡中的每个控件都继承了它们各自的视图模型。

当我运行应用程序时,一切都按预期工作。当我将容器窗口的大小调整为非常小的尺寸时,问题就开始了,在这样做之后:每个控件都失去了它们的绑定,因为它们的 DataContext 被一个名为DisconnectedItem.

我做了一些研究,发现这是由于控件不再是可视化树的一部分,因此绑定引擎将它们的 DataContext 设置为DisconnectedItem.

我能做些什么来防止我的控制失去他们的DataContext

编辑:

我刚刚发现主要问题来自RibbonGroup控件,该控件在折叠后导致其可视子项丢失其 DataContext。

4

2 回答 2

1

我通常DataContext="{Binding Mode=OneTime}"为所有功能区控件添加行作为解决方法,它可以完全解决问题。但是,您将无法DataContext多次更改。

于 2013-01-12T00:00:44.357 回答
1

我刚刚在这里找到了RibbonGroup控制问题的解决方法

我采取的解决方案是创建一个从控件继承的新RibbonGroup控件。

    public class MyRibbonGroup : RibbonGroup
    {
    public MyRibbonGroup() 
        : base()
    {
    }

    protected override void OnPropertyChanged(DependencyPropertyChangedEventArgs e)
    {
        base.OnPropertyChanged(e);

        // Force the bindings to be restored after 
        // the ribbon group collapsed or expanded to a menu button.
        if (e.Property == RibbonGroup.IsCollapsedProperty)
        {
            object objDataContext = this.DataContext;
            this.DataContext = null;
            this.DataContext = objDataContext;
        }
    }
}
于 2013-01-14T15:17:56.183 回答