使用组合框的WPF绑定

本文关键字:WPF 绑定 组合 | 更新日期: 2023-09-27 18:11:20

我正在尝试学习WPF数据绑定与实体框架。我已经在链接

中实现了教程

,它工作得很好。我试图插入一个组合框自己,我想把它绑定到类别的名称。但我没能做到。下面是我的尝试:关于XAML文件:

<ComboBox HorizontalAlignment="Left" Margin="394,421,0,0" VerticalAlignment="Top" Width="120" Name="ComboCategory" Binding="{Binding Name}" />

和代码隐藏:

ComboCategory.ItemSource = _context.Categories.Local.ToList();

你能告诉我我错过了什么吗?谢谢。

使用组合框的WPF绑定

尽管ItemSource的使用是完全有效的。我建议你和Data Binding合作。下面是来自MSDN:

的一个很好的定义

数据绑定是在应用程序UI和业务逻辑之间建立连接的过程。如果绑定具有正确的设置,并且数据提供了适当的通知,那么,当数据更改其值时,绑定到数据的元素将自动反映更改。数据绑定还意味着,如果元素中数据的外部表示发生更改,则可以自动更新底层数据以反映更改。例如,如果用户编辑TextBox元素中的值,底层数据值将自动更新以反映该更改。

我已经回答了一个问题,有人也有绑定项目到列表框的问题。这不是一个组合框,但原理是一样的。点击这里进入问题,点击这里直接进入答案。

基本上可以归结为:

  • 设置UI
  • 绑定数据

在下面的代码中,我根据教程中使用的属性更改了一些属性。

XAML:

<ListBox Margin="20" ItemsSource="{Binding Products}"> 
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Name}" />
                <TextBlock Text="{Binding Path=ProductId}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>
c#

public class Product 
{ 
    public int ProductId { get; set; } 
    public string Name { get; set; } 
    public int CategoryId { get; set; } 
    public virtual Category Category { get; set; } 
} 
public class ProductViewModel
{
    public List<Product> Products
    {
        get
        {
            return new List<Product>
            {
                new Product{ ProductId = 1, Name = "Product_1" },
                new Product{ ProductId = 2, Name = "Product_2" }
            };
        }
    }
}
//Following code can be placed in the Loaded event of the page:
DataContext = new ProductViewModel();

这里缺少DisplayMemberpath属性

<ComboBox HorizontalAlignment="Left" Margin="394,421,0,0" VerticalAlignment="Top" Width="120" Name="ComboCategory"  DisplayMemberPath = "Name" />

当我在XAML中使用它时,它工作了:

<ComboBox HorizontalAlignment="Left" Margin="394,421,0,0" VerticalAlignment="Top" Width="120" Name="ComboCategory" DisplayMemberPath = "Name" ItemsSource="{Binding}" />

简直不敢相信,看看链接

问题是ItemsSource(复数)而不是ItemSource(单数)