C# 没有从另一个类向ObservableCollection添加任何元素

C# 没有从另一个类向ObservableCollection添加任何元素,c#,wpf,data-binding,C#,Wpf,Data Binding,我创建了ObservableCollection,它与绑定等一起工作。现在我在向集合添加项时遇到了一个问题,它不可见 尝试了很多东西,但可能遗漏了一些明显的东西 主要类别: public class MainClass { public MainClass() { InitializeComponent(); DataContext = this; } static MainClass instance = null; st

我创建了ObservableCollection,它与绑定等一起工作。现在我在向集合添加项时遇到了一个问题,它不可见

尝试了很多东西,但可能遗漏了一些明显的东西

主要类别:

public class MainClass
{
    public MainClass()
    {
        InitializeComponent();
        DataContext = this;
    }
    static MainClass instance = null;
    static readonly object padlock = new object();

    public static MainClass Instance
    {
        get
        {
            lock (padlock)
            {
                if (instance == null)
                {
                    instance = new MainClass();
                }
                return instance;
            }
        }
    }

    private ObservableCollection<Server> _myListOfServersObjects;
    public ObservableCollection<Server> ObservableServers
    {
        get
        {
            if (_myListOfServersObjects == null)
                ObservableServers = new ObservableCollection<Server>();

            return _myListOfServersObjects;
        }
        set
        {
            if (_myListOfServersObjects != value)
            {
                _myListOfServersObjects = value;
                OnPropertyChanged("ObservableServers");
            }
        }
    }
}
WPF主要类别:

WPF其他类别:

结构:


相关问题

您定义可观察集合的方式存在一些问题:

首先,
UIElement
(例如main类)是一个
DependencyObject
,并且不实现
INotifyPropertyChanged
。因此,除非将
observesservers
定义为
dependencProperty

其次,我没有看到您尝试重新创建
ObserviceServer
,因此在
get
中实例化它是毫无意义的

所有这些都涉及到这一点:

要使绑定正常工作,您不必总是通知更改。如果不这样做,XAML将只接受默认值作为其绑定源。因此,默认情况下,应初始化后场
\u myListOfServersObjects

private ObservableCollection<Server> _myListOfServersObjects = new ObservableCollection<Server>();
编辑 当绑定到父视图内的属性时(例如,绑定目标位于UserControl内,UserControl位于MainClass内,MainClass将该属性用作绑定源),您可以使用
RelativeSource
查找绑定源:

所以不是

ItemsSource="{Binding ElementName=MainClassTab, Path=ObservableServers}"


此示例不完整或不可复制()。AddItem在何处以及如何调用?以及集合的显示方式——也许这只是一种不正确的投标方式view@ASh添加了更多代码。。感谢您在填写问题时提供的帮助谢谢您的回答,但这并没有解决我的问题。@TwentyLokto方法
AddItem
是否得到执行?@TwentyLokto您确定其余的绑定工作正常吗?e、 g.尝试将字符串添加到MainClass,并将其绑定到用户控件中的文本框中,看看绑定是否真的起作用。我从MainClass添加元素时没有任何问题,但我无法从另一个类添加它们。@TwentyLokto另外,示例文件中也有一些可疑的事情。为什么MainClass有一个
InitializeComponent
?为什么xaml中的UserControl标记看起来与正确的xaml语法完全不同?
public ObservableCollection<Server> ObservableServers
{
    get
    {
        return _myListOfServersObjects;
    }
}
public Server ObservableServers
{
    get { return (Server)GetValue(ObservableServersProperty); }
    set { SetValue(ObservableServersProperty, value); }
}
public static readonly DependencyProperty ObservableServersProperty =
    DependencyProperty.Register("ObservableServers", typeof(Server), typeof(MainClass), new PropertyMetadata(null));
ItemsSource="{Binding ElementName=MainClassTab, Path=ObservableServers}"
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=local:MainClass}, Path=ObservableServers}"