使用ComboBox进行WPF数据绑定

时间:2014-07-04 07:21:25

标签: c# wpf xaml data-binding

我正在尝试使用Entity Framework学习WPF数据绑定。我已在link

中实施了该教程

它完美无缺。我试图自己插入一个组合框,我想将它绑定到类别的名称。但我无法实现它。 这是我的尝试: 在XAML文件上:

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

和代码隐藏:

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

你能告诉我我失踪的是什么吗?感谢。

4 个答案:

答案 0 :(得分:1)

您在这里缺少DisplayMemberpath属性

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

答案 1 :(得分:1)

尽管使用ItemSource完全有效。我建议您使用Data Binding。这是 MSDN

的一个很好的定义
  

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

我已经回答了一个问题,其中某人也遇到了将项目绑定到ListBox的问题。这不是ComboBox,但原理是一样的。 Click here提出问题,并here直接回答。

基本上归结为:

  • 设置您的用户界面
  • 绑定您的数据

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

<强> 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();

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

无法相信,请查看link

问题是项 s 来源(复数)不是ItemSource(单数)