C# 将集合绑定到WPF列表框
更新:到目前为止,我已经根据您的帮助更新了代码,但仍然没有成功。应用程序加载时,列表框中没有任何项。我在windows的Constructor中将垃圾值分配给客户,然后还尝试设置ListBox的DataContext,如下所示: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;
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因为您直接将ItemsSource分配给静态资源,而不是相对于DataContext
还有一件事。我认为您应该在代码中为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。我当时正赶时间。