C# 使用linq的WPF组合框绑定

C# 使用linq的WPF组合框绑定,c#,wpf,linq,combobox,binding,C#,Wpf,Linq,Combobox,Binding,我想将一个小型win form应用程序转换为WPF应用程序 我使用的是LINQSQL,下面是dbml文件 这是我的xaml代码文件,其中有一个组合框和其他文本框 <ComboBox Height="23" IsDropDownOpen="False" Margin="107,52,281,0" Name="cbx_contact" VerticalAlignment="Top" /> <Label Height="17" HorizontalAlignment

我想将一个小型win form应用程序转换为WPF应用程序

我使用的是LINQSQL,下面是dbml文件

这是我的xaml代码文件,其中有一个组合框和其他文本框

    <ComboBox Height="23" IsDropDownOpen="False" Margin="107,52,281,0" Name="cbx_contact" VerticalAlignment="Top" />
    <Label Height="17" HorizontalAlignment="Left" Margin="25,55,0,0" VerticalAlignment="Top" Width="72">Contact :</Label>
    <TextBox Height="23" Margin="107,85,281,0" Name="txt_name" VerticalAlignment="Top" />
    <Label Height="23" HorizontalAlignment="Left" Margin="25,89,0,0" Name="label2" VerticalAlignment="Top" Width="72">Name* :</Label>
    <TextBox Height="23" Margin="107,118,281,0" Name="txt_cellno" VerticalAlignment="Top" />
    <Label Height="23" HorizontalAlignment="Left" Margin="25,121,0,0" Name="label3" VerticalAlignment="Top" Width="72">Cell No.* :</Label>
    <TextBox Height="23" Margin="107,0,281,173" Name="txt_add1" VerticalAlignment="Bottom" />
    <Label Height="18.025" HorizontalAlignment="Left" Margin="25,0,0,176" Name="label4" VerticalAlignment="Bottom" Width="72">Address1 :</Label>
    <TextBox Height="23" Margin="107,0,281,140" Name="txt_add2" VerticalAlignment="Bottom" />
    <Label Height="23" HorizontalAlignment="Left" Margin="25,0,0,138" Name="label5" VerticalAlignment="Bottom" Width="72">Address2 :</Label>
    <TextBox Height="23" Margin="107,0,281,107" Name="txt_city" VerticalAlignment="Bottom" />
我得到以下错误: 无法创建程序集“WpfApplication2,版本=1.0.0.0,区域性=中立,PublicKeyToken=null”中定义的“联系人表单”的实例。调用的目标已引发异常。标记文件“WpfApplication2”中出错;组件/联系人表格xaml第1行第7位


请给我一些绑定wpf gridview的好例子的链接。listview和combobox

匿名类型可能是问题所在,但在实际绑定时不应该是问题所在,因为您只是在设置ItemsSource

在您的xaml中:

<ComboBox ItemsSource="{Binding Path=.}" 
          DisplayMemberPath="name" 
          SelectedValuePath="contactid"/>

应该行。

我不认为匿名类型是问题所在,因为它显示了您的能力

我认为您的xaml中存在一些语法问题。

为了测试这一点,我可能会做一些简单的midieval测试,首先删除设置Itemssource的代码,看看它是否运行,如果您不确定它是您的xaml,那么它就在您的代码中

我建议创建一个包含所有所需数据结构的对象,然后将窗口的datacontext设置为该对象,例如

public class ContactViewModel
{
  public List<Contact> ContactList {get;set;}
  public Contact SelectedContact {get;set;}
}
然后您的xaml组合框可以是:

<ComboBox ItemsSource="{Binding ContactList}" SelectedItem="{Binding SelectedContact}"/>

如果ContactViewModel实现了INotifyPropertyChanged,则可以进一步修改xaml以实现此目的:

<Label>Contact:</Label>
<TextBox Text="{Binding SelectedContact.Name}"/>
<Label>Cell #:</Label>
<TextBox Text="{Binding SelectedContact.CellNo}"/>
<Label>Address 1:</Label>
<TextBox Text="{Binding SelectedContact.Address1}"/>
<Label>Address 2:</Label>
<TextBox Text="{Binding SelectedContact.Address2}"/>
联系人:
单元格#:
地址1:
地址2:

内部异常将非常有用,因为它应该说明实际发生了什么。谢谢@flq。。{“异常已由调用的目标引发。”}这是内部异常..但是linq已经在其designer.cs文件中创建了这个类,为什么我需要再次创建它???公共部分类联系人:INotifyPropertyChanging,INotifyPropertyChangedIt不是您再次创建它,而是您正在创建一个对象(视图模型)以与数据模型交互。
this.DataContext = new ContactViewModel();
<ComboBox ItemsSource="{Binding ContactList}" SelectedItem="{Binding SelectedContact}"/>
<Label>Contact:</Label>
<TextBox Text="{Binding SelectedContact.Name}"/>
<Label>Cell #:</Label>
<TextBox Text="{Binding SelectedContact.CellNo}"/>
<Label>Address 1:</Label>
<TextBox Text="{Binding SelectedContact.Address1}"/>
<Label>Address 2:</Label>
<TextBox Text="{Binding SelectedContact.Address2}"/>