Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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,我正在尝试学习使用实体框架进行WPF数据绑定。我已经在中实现了该教程 它工作得非常好。我试图自己插入一个组合框,我想将它绑定到类别的名称。但我没能做到。 以下是我的尝试: 在XAML文件上: <ComboBox HorizontalAlignment="Left" Margin="394,421,0,0" VerticalAlignment="Top" Width="120" Name="ComboCategory" Binding="{Binding Name}" /> 你能告诉

我正在尝试学习使用实体框架进行WPF数据绑定。我已经在中实现了该教程

它工作得非常好。我试图自己插入一个组合框,我想将它绑定到类别的名称。但我没能做到。 以下是我的尝试: 在XAML文件上:

<ComboBox HorizontalAlignment="Left" Margin="394,421,0,0" VerticalAlignment="Top" Width="120" Name="ComboCategory" Binding="{Binding Name}" />
你能告诉我我错过了什么吗?谢谢。

您在这里丢失了财产

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

尽管使用
ItemSource
是完全有效的。我建议您使用
数据绑定
。下面是来自MSDN的一个很好的定义:

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

我回答了一个问题,有人在将项目绑定到列表框时也遇到了问题。这不是一个组合框,但原理是一样的。回答问题,直接回答问题

基本上可以归结为:

  • 设置你的用户界面
  • 绑定数据
在下面的代码中,我根据教程中使用的属性稍微更改了属性

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 int ProductId{get;set;}
公共字符串名称{get;set;}
public int CategoryId{get;set;}
公共虚拟类别{get;set;}
} 
公共类ProductViewModel
{
公开上市产品
{
得到
{
返回新列表
{
新产品{ProductId=1,Name=“Product_1”},
新产品{ProductId=2,Name=“Product_2”}
};
}
}
}
//以下代码可放置在页面的已加载事件中:
DataContext=新产品视图模型();

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

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

不敢相信,检查一下


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

代码隐藏是真的吗?因为我在那一行得到了一个错误。我在这里得到了一个错误:ComboCategory.ItemSource=\u context.Categories.Local.ToList();其中“System.Windows.Controls.ComboBox”不包含“ItemSource”的定义,并且找不到接受“System.Windows.Controls.ComboBox”类型的第一个参数的扩展方法“ItemSource”(是否缺少using指令或程序集引用)?是wpf还是windform?
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();
<ComboBox HorizontalAlignment="Left" Margin="394,421,0,0" VerticalAlignment="Top" Width="120" Name="ComboCategory" DisplayMemberPath = "Name" ItemsSource="{Binding}" />