Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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# 将集合绑定到WPF列表框_C#_Wpf_Xaml_Data Binding - Fatal编程技术网

C# 将集合绑定到WPF列表框

C# 将集合绑定到WPF列表框,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,更新:到目前为止,我已经根据您的帮助更新了代码,但仍然没有成功。应用程序加载时,列表框中没有任何项。我在windows的Constructor中将垃圾值分配给客户,然后还尝试设置ListBox的DataContext,如下所示: CustomerList.DataContext = Customers; public class Customer { public String Name { get; set; } public String Email { get;

更新:到目前为止,我已经根据您的帮助更新了代码,但仍然没有成功。应用程序加载时,列表框中没有任何项。我在windows的Constructor中将垃圾值分配给客户,然后还尝试设置ListBox的DataContext,如下所示:

CustomerList.DataContext = Customers;
public class Customer
{
    public String Name { get; set; }    
    public String Email { get; set; }
}
public List<Customer> Customers { get; set; }
---原始问题(带更新代码)---

我在WPF项目中的数据绑定方面遇到了问题

我有一个类,Customer,如下所示:

CustomerList.DataContext = Customers;
public class Customer
{
    public String Name { get; set; }    
    public String Email { get; set; }
}
public List<Customer> Customers { get; set; }
在我的XAML代码背后,我有一组客户,如下所示:

CustomerList.DataContext = Customers;
public class Customer
{
    public String Name { get; set; }    
    public String Email { get; set; }
}
public List<Customer> Customers { get; set; }
公共列表客户{get;set;}
我试图用ListItemTemplate将每个客户绑定到一个ListBox,该ListItemTemplate在文本框中显示客户的信息(姓名/电子邮件)以及一个锁定/解锁文本框的按钮(将IsEnabled属性设置为true或false)

最好的办法是什么

到目前为止,我一直在努力跟踪,但没有成功

在XAML中,我目前有以下内容(暂时忽略切换部分,我只是尝试列出集合本身):


您需要更改

ItemsSource="{Binding Source=Customers}"


尝试如下设置CustomerList的
ItemsSource
ItemsSource=“{Binding}”
。如果已将ListBox的
DataContext
设置为客户列表,则需要将ItemsSource设置为同一集合,从而直接绑定

如果您喜欢使用
CollectionViewSource
,您可以做的另一件事是将窗口的DataContext设置为同一类
DataContext=this
,因为如果没有这个类,资源定义将无法找到您在代码隐藏中定义的“Customers”集合。但是,如果这样做,则不需要
CustomerList.DataContext=Customers
还有一件事。我认为您应该在代码中为CollectionViewSource和相应的集合指定不同的名称。这不会导致运行时问题,但会使维护代码变得困难;)


希望这有帮助:)

类似于更新的代码在更改后对我有效

<TextBox Content="{Binding Name}" />
但是我认为它只在括号中使用(
像这样


这可能是问题的根源吗

Customers
是字段还是属性?要使绑定工作,它必须是一个属性。您已为
CollectionViewSource
DataTemplate
提供了相同的密钥。将其中一个项的键更改为唯一项。@ChrisF,当我运行应用程序时,列表框中没有显示任何项,因此我假设数据绑定由于某些原因无法工作。@svick,Customers是MainWindow.xaml.csI的一个属性。我不认为您需要指定列表的DataContext,它不使用它(因为它指定了一个源),所以窗口应该设置为包含
客户的任何对象,因为在CollectionViewSource中,您只指定了一个路径,因此DataContext将用作基本源。如果您对所有这些都不熟悉,请阅读MSDN上的文章,如.Or ItemsSource=“{绑定源={StaticResource客户}}”实际上,只有Jerry的版本可以工作,因为您不能直接使用
CollectionViewSource
作为
ItemsSource
。此外,需要在某个地方设置DataContext。@H.B.我应该如何设置DataContext?我目前正在按照窗口构造函数中更新的问题所示进行设置。正确吗?谢谢!@Jerry尼克松,@Matt Eleen,谢谢你的帮助!我已经按照更新问题中的说明进行了更改,但我似乎仍然无法使绑定正常工作。虽然我无法设置数据源,但我不认为它是列表框的属性,应该在哪里设置?谢谢!@Evan:抱歉,我拼错了datacontext。我当时正赶时间。