0

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

4

1 回答 1

1

因为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));
        }
    }
}
于 2013-02-19T07:46:54.897 回答