WPF combobox связывание с использованием linq - PullRequest
2 голосов
/ 21 апреля 2011

Я хочу преобразовать небольшое приложение win-form в приложение WPF.

Я использую linq-sql и ниже файл dbml

enter image description here Это мой кодовый файл xaml, в котором у меня есть 1 комбинированный список и другие текстовые поля

    <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" />

This is the design Я хочу привязать ComboBox к таблице контактов с отображаемым элементом «Имя» и значением «ContactID»

Я пробовал разные-разные методы, но у меня ничего не работает ...

вот код, который выдает ошибку

  DataClasses1DataContext db = new DataClasses1DataContext();
        var sel = from contact in db.Contacts select new { contactid = contact.ContactID, name = contact.Name };

        cbx_contact.ItemsSource = sel;
        cbx_contact.DisplayMemberPath = "name";
        cbx_contact.SelectedValuePath = "contactid";

Я получаю следующую ошибку: Невозможно создать экземпляр «Contact_form», определенный в сборке «WpfApplication2, версия = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null». Исключение было брошено целью вызова. Ошибка в файле разметки 'WpfApplication2; component / Contact_form.xaml' Строка 1, позиция 7.

И, пожалуйста, дайте мне ссылки на хорошие примеры связывания wpf gridview. listview и выпадающий список

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

Я не верю, что анонимные типы являются проблемой, потому что эта статья и эта статья показывают, что вы можете.

Я думаю, у вас есть проблемы с синтаксисом в вашем xaml.

чтобы проверить это, я, вероятно, выполнил бы простое средневековое тестирование и сначала удалил код, который устанавливает Itemssource, и проверил, работает ли он, если вы не знаете наверняка, что это ваш xaml, если да, то он находится в вашем фоновый код.

Я бы порекомендовал создать объект со всеми нужными вам структурами данных, а затем установить текстовый текст окна для этого объекта, например

public class ContactViewModel
{
  public List<Contact> ContactList {get;set;}
  public Contact SelectedContact {get;set;}
}

в конструкторе окна сделайте это:

this.DataContext = new ContactViewModel();

и тогда ваш комбинированный список 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}"/>
0 голосов
/ 21 апреля 2011

Возможно, проблема связана с анонимным типом, но это не должно быть на самом деле при связывании, поскольку вы устанавливаете только ItemsSource.

В вашем xaml:

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

В вашемкод позади:

cbx_contact.DataContext = sel;

Должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...