【问题标题】:WPF TabControl Items Add MVVMWPF TabControl 项添加 MVVM
【发布时间】:2013-02-19 15:46:54
【问题描述】:

我有一个像这样的 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 的问题。如果我在构造函数中启动该函数,那么它就可以工作。

【问题讨论】:

    标签: wpf xaml mvvm tabcontrol tabitem


    【解决方案1】:

    因为Xaml 不知道您添加了新的TabItem

    将您的 List&lt;T&gt; 更改为 ObservableCollection&lt;T&gt;,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));
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多