将集合绑定到WPF ListBox

时间:2011-07-18 20:45:46

标签: c# wpf xaml data-binding

更新:到目前为止,我已根据您的帮助更新了代码,但仍然没有运气。当应用程序加载ListBox时没有项目。我在windows的构造函数中为客户分配垃圾值,然后我也尝试按如下方式设置ListBox的DataContext:

CustomerList.DataContext = Customers;

--- 原始问题(更新后的代码)---

我在WPF项目中遇到数据绑定问题。

我有一个类Customer,如下:

public class Customer
{
    public String Name { get; set; }    
    public String Email { get; set; }
}

在我的XAML代码背后,我有一组客户如下:

public List<Customer> Customers { get; set; }

我正在尝试将每个客户绑定到一个ListBox,其中ListItemTemplate显示TextBoxes中的客户信息(名称/电子邮件)以及一个锁定/取消组合TextBoxes的按钮(将IsEnabled属性设置为true或false)。 / p>

最好的方法是什么?

到目前为止,我一直在努力追随他并没有成功。

在XAML中,我目前有以下内容(暂时忽略切换部分,我只是试图让列表本身被列出。):

<Window.Resources>
    <CollectionViewSource x:Key="Customers" Source="{Binding Path=Customers, Mode=TwoWay}"/>
    <DataTemplate x:Key="Customer">
        <StackPanel Orientation="Horizontal">
            <TextBox Content="{Binding Name}" />
            <TextBox Content="{Binding Email}" />
        </StackPanel>
    </DataTemplate>
</Window.Resources>

<StackPanel>
    <ListBox ItemsSource="{Binding Source={StaticResource Customers}}"
             ItemTemplate="{StaticResource ResourceKey=Customer}"
             Name="CustomerList"
             Height="300" />
</StackPanel>

3 个答案:

答案 0 :(得分:1)

类似于更新后的代码在更改

后适合我
<TextBox Content="{Binding Name}" />

<TextBox Text="{Binding Name}" />

由于TextBox没有Content属性(如Label),前者拒绝在VS中编译。

好吧,它在定义中设置为Text

[ContentPropertyAttribute("Text")]
public class TextBox : TextBoxBase, IAddChild

但我认为只在括号(<TextBox>Like so</TextBox>)之间使用?

这可能是问题的根源吗?

答案 1 :(得分:0)

您需要更改

ItemsSource="{Binding Source=Customers}"

ItemsSource="{Binding Source={StaticResource Customers}}" DataContext="{StaticResource Customers}"

答案 2 :(得分:0)

尝试按以下方式设置CustomerList的ItemsSourceItemsSource="{Binding}"。您已将ListBox的DataContext设置为客户列表,您需要将ItemsSource设置为相同的集合,因此,直接绑定。

如果您更喜欢使用CollectionViewSource,您可以做的另一件事是将窗口的DataContext设置为同一个类DataContext=this,因为没有这个,资源定义就赢了'能够找到您在后面的代码中定义的“客户”集合。但是,如果这样做,则不需要CustomerList.DataContext = Customers;,因为您直接将ItemsSource分配给静态资源,而不是相对于DataContext。

还有一件事。我认为你应该给代码中的CollectionViewSource和相应的集合提供不同的名称。这不会导致运行时问题,但这使得维护代码变得困难;)

希望这会有所帮助:)