代码之家  ›  专栏  ›  技术社区  ›  user2025830

WPF选项卡控制项添加MVVM

  •  0
  • user2025830  · 技术社区  · 12 年前

    我有一个像这样的WPF TabControl:

    XAML浓度:

    <TabControl Name="myTabControl" ItemsSource="{Binding Main.TabItems, UpdateSourceTrigger=PropertyChanged}" />
    

    现在我想在运行时添加TabItems。这是我的模型。

    C编号:

    class Model() : INotifyPropertyChanged
    {
        private List<TabItem> _tabitems = new List<TabItem>();
    
        public Model()
        {
            TabItem myItem = new TabItem();
            myItem.Header = "test";
            myItem.Content = "test";
            _tabitems.Add(myItem);
            TabItems = _tabitems;
        } 
    
        public List<TabItem> TabItems
        {
            get
            {
                return _tabitems;
            }
            set
            {
                _tabitems = value;
                OnPropertyChanged("TabItems");
            }
        }
    
        public bool Execute()
        {
            TabItem myItem = new TabItem();
            myItem.Header = "test";
            myItem.Content = test;
            _tabitems.Add(myItem);
            TabItems = _tabitems;
    
            return true;
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        private void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
    
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    

    如果我开始我的程序,构造函数中的代码运行良好。我在TabControl中有一个TabItem。但是,如果我从命令中执行函数execute(),那么什么都不会发生。如何解决可以从构造函数中添加一个tabitem的问题。如果我在构造函数中启动函数,那么它就可以工作了。

    1 回复  |  直到 12 年前
        1
  •  1
  •   sa_ddam213    12 年前

    因为 Xaml 不知道你添加了一个新的 TabItem

    更改您的 List<T> ObservableCollection<T> ,ObservableCollection将通知UI集合的任何更改(添加、删除等)。

    例子:

    class Model : INotifyPropertyChanged
    {
        private ObservableCollection<TabItem> _tabitems = new ObservableCollection<TabItem>();
    
        public Model()
        {
            TabItem myItem = new TabItem();
            myItem.Header = "test";
            myItem.Content = "test";
            TabItems.Add(myItem);
        } 
    
        public ObservableCollection<TabItem> TabItems
        {
            get
            {
                return _tabitems;
            }
            set
            {
                _tabitems = value;
                OnPropertyChanged("TabItems");
            }
        }
    
        public bool Execute()
        {
            TabItem myItem = new TabItem();
            myItem.Header = "test";
            myItem.Content = test;
            TabItems.Add(myItem);
    
            return true;
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        private void OnPropertyChanged(string propertyName)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
    
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
    
    推荐文章