对象绑定到列表框不起作用
本文关键字:不起作用 列表 绑定 对象 | 更新日期: 2023-09-27 18:04:39
目前我尝试用WPF构建类似的东西!截图:https://i.stack.imgur.com/KuU06.png
我有一个ObservableCollection与我的"Wecker"对象。我想动态地添加项目到列表框与DataBinding,看起来像在屏幕截图。到目前为止,每次尝试都失败了。我需要在XAML文件中设置什么??
public static ObservableCollection<Wecker> WeckerCollection = new ObservableCollection<Wecker>();
public ObservableCollection<Wecker> MyWeckerCollection
{
get { return WeckerCollection; }
}
老爷车类
public class Wecker
{
public ArrayList dayOfWeek { get; set; }
public DateTime Alarm { get; set; }
public bool activated { get; set; }
public bool loop { get; set; }
public int maxRunTime { get; set; }
public int id { get; set; }
public bool schlummern { get; set; }
public bool antiStandby { get; set; }
public bool activateMonitor { get; set; }
public string fileName { get; set; }
public string Mp3 { get; set; }
public string Message { get; set; }
public bool ShowMessage { get; set; }
public int volume { get; set; } }
我上次试过了:
<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
在函数中设置DataContext
this.DataContext = this;
或者你也可以在XAML的Window (top)部分
DataContext="{Binding RelativeSource={RelativeSource self}}"
如果你已经设置了DataContext,那么它应该可以工作
你确定它在Windows部分
Try(但Path是默认属性,所以不应该有问题)
ItemsSource="{Binding Path=MyWeckerCollection}"
这可能是你的问题-公共静态?
这里公共静态的目的是什么?
public static ObservableCollection<Wecker> WeckerCollection = new ObservableCollection<Wecker>();
如果你想使用一个支持属性,那么像这样做
private ObservableCollection<Wecker> myWeckerCollection = new ObservableCollection<Wecker>();
public ObservableCollection<Wecker> MyWeckerCollection
{
get { return myWeckerCollection ; }
}
听起来你的DataContext
设置不正确。
你说你将DataContext
绑定到{Binding RelativeSource={RelativeSource Self}}
,然而这只是将DataContext
绑定到UI对象本身。
例如
<Window DataContext="{Binding RelativeSource={RelativeSource Self}}">
将DataContext
设置为Window对象,但是类Window
没有称为MyWeckerCollection
的属性,因此绑定将失败。
如果你有
<local:MyCustomWindow DataContext="{RelativeSource={RelativeSource Self}}">
和MyCustomWindow
有一个名为MyWeckerCollection
的属性,那么它将工作。
我也看到你在这里的评论说:
我根本没有得到任何数据,我检查了对象,"WeckerCollection",它在将其设置为DataContext之前具有数据
这使我相信
A) MyWeckerCollection
不是一个UI控件,在这种情况下,你需要更新你的DataContext
绑定到Self
以外的东西,所以它正确地绑定到你的对象包含MyWeckerCollection
而不是UI对象。
B)或者这个评论可以阅读,因为你正在设置DataContext
为MyWeckerCollection
本身,当然,类ObservableCollection<Wecker>
本身没有一个名为MyWeckerCollection
的属性,所以绑定将失败。
所以你的问题的根本原因是DataContext
没有被正确设置。
遗憾的是,您提供的信息不足以帮助我们确定正确设置DataContext
的方法,但是如果您能提供更多的信息,我很乐意帮助您。
通常Visual Studio的绑定错误和/或调试模式足以为您指出正确的方向来修复DataContext
,或者有一些第三方工具,如Snoop,我强烈推荐用于调试绑定错误。
同样,如果你是WPF的新手(听起来你是),并且正在努力理解DataContext
的目的以及它是如何工作的,我建议我为初学者写一篇博客文章:你所说的"DataContext"是什么?如果你要使用WPF,理解DataContext
是非常重要的。:)
尝试将ItemSource添加到ListBox中,并像这样更改Xaml:背后代码:
this.YourList.ItemsSource = WeckerCollection;
Xaml: <ListBox HorizontalAlignment="Left" Height="392" VerticalAlignment="Top" Width="431" Margin="15,89,0,0" ScrollViewer.VerticalScrollBarVisibility="Visible">