C# 对象绑定到listbox无效
目前,我尝试用WPF构建类似的东西!截图: 我的“Wecker”对象有一个可观察的集合。我想用屏幕截图中的数据绑定动态地将项目添加到列表框中。到目前为止,每一次尝试都失败了。我需要在XAML文件中设置什么C# 对象绑定到listbox无效,c#,wpf,xaml,listbox,C#,Wpf,Xaml,Listbox,目前,我尝试用WPF构建类似的东西!截图: 我的“Wecker”对象有一个可观察的集合。我想用屏幕截图中的数据绑定动态地将项目添加到列表框中。到目前为止,每一次尝试都失败了。我需要在XAML文件中设置什么 public static ObservableCollection<Wecker> WeckerCollection = new ObservableCollection<Wecker>(); public ObservableCollection<Wecke
public static ObservableCollection<Wecker> WeckerCollection = new ObservableCollection<Wecker>();
public ObservableCollection<Wecker> MyWeckerCollection
{
get { return WeckerCollection; }
}
上次我试过:
<ListBox HorizontalAlignment="Left" Height="392" VerticalAlignment="Top" Width="431" Margin="15,89,0,0" ScrollViewer.VerticalScrollBarVisibility="Visible" ItemsSource="{Binding MyWeckerCollection}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding activated, Mode=TwoWay}" />
<Label Content="{Binding Alarm}" />
<Label Content="{Binding dayOfWeek}" />
<Label Content="{Binding Message}" />
<Label Content="{Binding Mp3}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
我怀疑您没有设置DataContext 在ctor中,设置DataContext
this.DataContext = this;
或者您可以在窗口(顶部)部分的XAML中执行此操作
如果您已经设置了DataContext,那么它应该可以工作你确定它在Windows部分吗 Try(但是Path是默认属性,所以这应该不是问题) 这可能是您的问题-公共静态?
公共静态的目的是什么
public static ObservableCollection<Wecker> WeckerCollection = new ObservableCollection<Wecker>();
公共静态ObservableCollection WeckerCollection=新ObservableCollection();
如果要使用支持属性,请按如下方式执行
private ObservableCollection<Wecker> myWeckerCollection = new ObservableCollection<Wecker>();
public ObservableCollection<Wecker> MyWeckerCollection
{
get { return myWeckerCollection ; }
}
private observeCollection myWeckerCollection=新observeCollection();
公共可观测收集MyWeckerCollection
{
获取{return myWeckerCollection;}
}
尝试将ItemSource添加到列表框中,并按如下方式更改Xaml:
代码隐藏:
this.YourList.ItemsSource = WeckerCollection;
Xaml:
<ListBox HorizontalAlignment="Left" Height="392" VerticalAlignment="Top" Width="431" Margin="15,89,0,0" ScrollViewer.VerticalScrollBarVisibility="Visible">
听起来您的
数据上下文设置不正确
您说您正在将DataContext
绑定到{binding RelativeSource={RelativeSource Self}}
,但是这只是将DataContext
绑定到UI对象本身
比如说,
<Window DataContext="{Binding RelativeSource={RelativeSource Self}}">
而MyCustomWindow
有一个名为MyWeckerCollection
的属性,那么它就可以工作了
我还看到哪些国家:
我根本没有得到任何数据,我检查了对象“WeckerCollection”,在将其设置为DataContext之前,它有数据
这让我相信
A) MyWeckerCollection
不是UI控件,在这种情况下,您需要更新与Self
以外的对象的DataContext
绑定,以便它正确绑定到包含MyWeckerCollection
的对象,而不是UI对象
B) 或者,当您将DataContext
设置为MyWeckerCollection
本身时,可以阅读此注释,当然类observedcollection
本身没有名为MyWeckerCollection
的属性,因此绑定将失败
因此,问题的根本原因是未正确设置DataContext
不幸的是,您提供的信息不足以帮助我们确定设置DataContext
的正确方法,但是如果您能提供给我们,我很乐意为您提供帮助
通常,VisualStudio的绑定错误和/或调试模式足以为您指明修复DataContext
的正确方向,或者有一些第三方工具,我强烈建议您使用它们来调试绑定错误
另外,如果您是WPF新手(听起来像是),并且正在努力理解DataContext
的用途以及它的工作原理,我建议您写一篇博客文章给初学者:。如果您要使用WPF,那么了解DataContext
非常重要。:) 您需要显示到目前为止您拥有的Xaml,这样人们就不会被迫从第1方开始。编辑第一篇博文只是为了清楚,您正在成功地将项目添加到绑定集合中,并且UI没有更新?您的代码看起来很好…DataContext是{Binding RelativeSource={RelativeSource Self}}我需要更改它吗?那有什么价值呢?MyWeckerCollection??不,看起来没有问题(如果您看到初始对象,那么DataContext必须很好)。只是添加中断了还是根本没有得到任何数据?DataContext是{Binding RelativeSource={RelativeSource Self}}我需要更改它吗?那有什么价值呢?MyWeckerCollection???@Diablo绑定到Self
绑定到UI对象。您的UI对象是否包含MyWeckerCollection
属性?例如,
将数据上下文
设置为窗口
类,但是窗口
没有名为MyWeckerCollection
的属性,因此绑定将失败。但是,如果您有
,并且MyCustomWindow
有一个名为MyWeckerCollection
的属性,那么它就可以工作了。@Blam我也认为static
关键字在这里看起来非常不合适,可能是导致问题的原因,但是,我运行了一个快速测试,使用static
并不能阻止属性正确绑定或正确更新。@Rachel仍然想知道它的用途。OP并没有给出全部情况。这将绑定到DataContext本身,并且后面的代码将覆盖它(或者根据该行的位置被覆盖)。这几乎不可能有任何帮助,而且在语义上肯定是混乱的。因此,绑定引擎会将ItemsSource分配给DataContext本身。绝对不是你想要的,而且在语义上仍然非常混乱(你有两个集合,这两个集合适用吗?这取决于顺序,这是非常糟糕的)@Diablo,我强烈怀疑这里还发生了一些事情,你需要进一步了解,即使你显然有它的工作原理(我不知道如何使用这段代码)。我仍然建议您检查初始设置。它可能是在绑定发生之后出现的,并且您没有实现InotifyPropertyChagned通过代码隐藏设置ItemsSource
属性,就像这样是不一样的
this.YourList.ItemsSource = WeckerCollection;
<ListBox HorizontalAlignment="Left" Height="392" VerticalAlignment="Top" Width="431" Margin="15,89,0,0" ScrollViewer.VerticalScrollBarVisibility="Visible">
<Window DataContext="{Binding RelativeSource={RelativeSource Self}}">
<local:MyCustomWindow DataContext="{RelativeSource={RelativeSource Self}}">