WPF将项目添加到可观察的集合并打印。返回对象参考错误

乔克·马蒂尼(JokerMartini)

我这里有一个简单的应用程序,它使用可观察的集合并为每个项目生成tabcontrol选项卡。但是,当我尝试添加其他选项卡时,它会失败。我还注意到,当我尝试打印集合中的数据时,看来我做不到。两行代码都出现以下错误。

错误1非静态字段,方法或属性需要对象引用

InitializeComponent();
//ERRORS on both lines below
Console.WriteLine(ViewModel.TabItems);
ViewModel.AddContentItem();

MainWindow.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            //ERRORS on both lines below
            Console.WriteLine(ViewModel.TabItems);
            ViewModel.AddContentItem();
        }
    }
}

MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:data="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="250">

    <Window.DataContext>
        <data:ViewModel/>
    </Window.DataContext>

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <TabControl ItemsSource="{Binding TabItems}" Grid.Row="1" Background="LightBlue">
            <TabControl.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
                        <TextBlock Text="{Binding Header}" VerticalAlignment="Center"/>
                    </StackPanel>
                </DataTemplate>
            </TabControl.ItemTemplate>

            <TabControl.ContentTemplate>
                <DataTemplate>
                    <TextBlock
                    Text="{Binding Content}" />
                </DataTemplate>
            </TabControl.ContentTemplate>
        </TabControl>

    </Grid>
</Window>

ViewModel.cs

using System;
using System.Collections.ObjectModel;
using System.Windows;

namespace WpfApplication1
{
    public class ViewModel : ObservableObject
    {
        private ObservableCollection<TabItem> tabItems;

        public ObservableCollection<TabItem> TabItems
        {
            get { return tabItems ?? (tabItems = new ObservableCollection<TabItem>()); }
        }

        public ViewModel()
        {
            TabItems.Add(new TabItem { Header = "One", Content = DateTime.Now.ToLongDateString() });
            TabItems.Add(new TabItem { Header = "Two", Content = DateTime.Now.ToLongDateString() });
            TabItems.Add(new TabItem { Header = "Three", Content = DateTime.Now.ToLongDateString() });
        }

        public void AddContentItem()
        {
            TabItems.Add(new TabItem { Header = "Three", Content = DateTime.Now.ToLongDateString() });
        }
    }



    public class TabItem
    {
        public string Header { get; set; }
        public string Content { get; set; }
    }
}

ObservableObject.cs

using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;

namespace WpfApplication1
{
    public class ObservableObject : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public void NotifyPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }
}
崔德

你应该这样做

namespace WpfApplication1
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            var viewModel = (ViewModel) this.DataContext;

            Debug.WriteLine(viewModel.TabItems);
            viewModel.AddContentItem();
        }
    }
}

更新感谢国王国王

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将项目添加到可观察的集合中

来自分类Dev

C#无法将项目添加到可观察的集合

来自分类Dev

将项目添加到已排序的可观察集合中

来自分类Dev

将项目添加到绑定的可观察集合时,WPF树视图可见性转换器未更新

来自分类Dev

敲除将javascript对象添加到可观察数组

来自分类Dev

添加到可观察集合时的奇怪行为

来自分类Dev

将项目添加到“可观察阵列的淘汰赛”

来自分类Dev

如何将两个项目添加到此可观察列表中?

来自分类Dev

如何将选定的可观察对象附加到新添加的项目?

来自分类Dev

将元素添加到可观察的数组打字稿

来自分类Dev

将.join添加到可观察数组

来自分类Dev

将集合添加到集合并创建嵌套集合

来自分类Dev

将选定的项目添加到集合

来自分类Dev

如何将多个项目添加到ItemsSource WPF多个集合绑定中?

来自分类Dev

多个数据解析以添加到可观察的集合中

来自分类Dev

Android-将新项目添加到MutableLiveData并观察

来自分类Dev

参考正在将项目添加到数组

来自分类Dev

参考正在将项目添加到数组

来自分类Dev

将观察者添加到动态创建的对象

来自分类Dev

使用MVVM模式将项目添加到集合

来自分类Dev

没有将项目添加到集合中

来自分类Dev

将项目(xml元素)的集合添加到XML doc

来自分类Dev

使用 LINQ 将丢失的项目添加到集合中

来自分类Dev

将项目添加到数据网格的集合中

来自分类Dev

从可观察的集合中动态删除项目-WPF

来自分类Dev

将CSS属性添加到对象的集合中

来自分类Dev

Vba将集合添加到对象属性

来自分类Dev

使用LinkedList集合将实例变量添加到对象

来自分类Dev

将CSS属性添加到对象的集合中

Related 相关文章

热门标签

归档