首页 > 解决方案 > 单击的选项卡项

问题描述

我有一个问题,我有一个带有 tabcontrol 的 wpf 表单,在 tabcontrol 里面有多个 tabitems。顺便说一句,我正在用 mvvmlight 做 mvvm 设计模式。好的,现在我想将一些数据从绑定到第一个 tabitem 的 viewmodel 传递给另一个绑定到第二个 tabitem 的第二个 viewmodel,但仅在单击第二个 tabitem 时。提前致谢

标签: wpfmvvmdata-bindingmvvm-light

解决方案


这听起来像一个非常奇怪的要求,如果我错了,请纠正我,但我怀疑你措辞的方式实际上并不是你想要完成的。使用 MVVM 管理选项卡的常用方法是首先为选项卡面板创建视图模型:

public class TabItemViewModel
{
    public string Header { get; set; }

    // fields for the actual panel items go here

    public override string ToString() => this.Header;
}

然后回到你的视图模型中,你创建一个可观察的集合和一个属性来跟踪当前选择了哪个选项卡:

    public ObservableCollection<TabItemViewModel> MyItems { get; } = new ObservableCollection<TabItemViewModel>
    {
        new TabItemViewModel { Header = "Tab Page 1" },
        new TabItemViewModel { Header = "Tab Page 2" },
        new TabItemViewModel { Header = "Tab Page 3" }
    };

    private TabItemViewModel _CurrentTab;
    public TabItemViewModel CurrentTab
    {
        get { return this._CurrentTab; }
        set
        {
            if (this._CurrentTab != value)
            {
                this._CurrentTab = value;
                RaisePropertyChanged(() => this.CurrentTab);
            }
        }
    }
}

然后,您的 XAML 将绑定到集合和属性:

<TabControl ItemsSource="{Binding MyItems}" SelectedItem="{Binding CurrentTab}" />

结果:

在此处输入图像描述

由于CurrentTab跟踪当前选择的选项卡,您的视图模型代码可以随时轻松检查是否是用户当前选择的选项卡,因此无需自行处理绑定。由于绑定是双向的,因此视图模型还可以控制当前处于活动状态的选项卡,这在向应用程序添加导航助手时特别方便。

如果您真的想删除绑定,那么很容易向您的视图模型添加一个额外的数据字段,然后在CurrentTabsetter 中设置/清除它。


推荐阅读