对象绑定到列表框不起作用

本文关键字:不起作用 列表 绑定 对象 | 更新日期: 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)或者这个评论可以阅读,因为你正在设置DataContextMyWeckerCollection本身,当然,类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">