C# 没有从另一个类向ObservableCollection添加任何元素
我创建了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
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}"