【问题标题】:Binding SelecteItem in TabControl在 TabControl 中绑定 SelecteItem
【发布时间】:2011-10-13 17:24:44
【问题描述】:

这是 MVVM 项目。我在它的项目中有一个带有 TabControls 的 ListBox。每个 TabControl 的 TabItem 都不同,并且是从 ViewModel 绑定的:

                <TabControl ItemsSource="{Binding Tabs}"
                </TabControl >  

标签是:

    public ObservableCollection<TabItem> Tabs
    {   get { return tabs;  }
        set {
            tabs = value;
            value.CollectionChanged += delegate
            {
                OnPropertyChanged("Tabs");
            };

            OnPropertyChanged("Tabs"); } }

选项卡仅通过以下方式填充一次:

                Tabs = new ObservableCollection<TabItem>();

                if (details.Image != null || !String.IsNullOrEmpty(details.Summary))
                    Tabs.Add(new TabItem() { Header = "General Info", Content = new GeneralInfo() { DataContext = ItemDetails } });  ........... 6 different types

这是关于我所拥有的一些信息。然后我动态更改此 TabControls 的 DataContext 以模拟滚动。

来自 ViewModel 的所有信息都绑定到控件中,但是 TabControl 存在问题。标头已绑定。但内容没有。所有标题都被取消选择,并且 TabCntrol 内容区域为空。

我尝试在 SelectedIndex 和 SelectedItem 上进行 TwoWayBinding,但它没有帮助.... 似乎 SelectedIndex 没有做任何可以选择 TabItem 的事情。 并且 SelectedItem 不起作用,因为我认为在每次更改数据上下文后它都有新的参考。因为 TabControl.ItemsSource 重新绑定并创建了新的 TabItems。

也许有人解决了同样的问题并且知道解决方案?

谢谢

【问题讨论】:

  • 为什么每次Collection 发生变化时都会出现“Tabs”?这对我来说没有多大意义。 ObservableCollection 已经通知了集合内的特定更改(添加、删除等),而这些更改,您告诉 UI “忘记集合,获取我的新集合”。如果您的集合完全改变了,是的,如果没有,则提高“选项卡”,并且集合中的某些内容更改不会做任何事情,这就是 ObservableCollection 自动完成的工作。
  • 当然,谢谢,我的错误。但它并没有解决实际问题:)

标签: c# binding mvvm tabcontrol datacontext


【解决方案1】:

我已经解决了我的问题。 问题是我使用控件作为 DataContext: - TabItems 列表 - TabItems 内容中的控件 有一些过程,我不完全理解。但是,想法是当 DataContext 发生变化时,一个 DataContext 可以分配给 2 个不同的 TabControl。由于 UI 控件不能同时属于 2 个父级,因此,应该显示内容中来自 DataContext 的控件的绑定不起作用。并且不会抛出异常(因为它绑定了微笑 | :))

所以,我从 DataContext 中删除所有 UI 对象,并添加对象模型。并创建显示这些对象模型的视图的用户控件

【讨论】:

    猜你喜欢
    • 2018-04-21
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多