Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对象绑定到listbox无效_C#_Wpf_Xaml_Listbox - Fatal编程技术网

C# 对象绑定到listbox无效

C# 对象绑定到listbox无效,c#,wpf,xaml,listbox,C#,Wpf,Xaml,Listbox,目前,我尝试用WPF构建类似的东西!截图: 我的“Wecker”对象有一个可观察的集合。我想用屏幕截图中的数据绑定动态地将项目添加到列表框中。到目前为止,每一次尝试都失败了。我需要在XAML文件中设置什么 public static ObservableCollection<Wecker> WeckerCollection = new ObservableCollection<Wecker>(); public ObservableCollection<Wecke

目前,我尝试用WPF构建类似的东西!截图:

我的“Wecker”对象有一个可观察的集合。我想用屏幕截图中的数据绑定动态地将项目添加到列表框中。到目前为止,每一次尝试都失败了。我需要在XAML文件中设置什么

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}}">