TabItem已点击

时间:2019-05-22 04:24:15

标签: wpf mvvm data-binding mvvm-light

我有一个问题,我有一个带tab控件的wpf表单,在tabcontrol内有多个tabitems。顺便说一下,我正在用mvvmlight做mvvm设计模式。好的,现在我想将绑定到第一个选项卡的视图模型中的某些数据传递给绑定到第二个选项卡的第二个视图模型中的其他数据,但仅在单击第二个选项卡时才传递。预先感谢

1 个答案:

答案 0 :(得分:1)

这听起来像是一个非常奇怪的要求,如果我错了,请纠正我,但我怀疑您所说的方式实际上并不是您要实现的目标。使用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}" />

结果:

enter image description here

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

如果您确实想删除绑定,那么可以很容易地在视图模型中添加一个额外的数据字段,然后在CurrentTab设置器中进行设置/清除。