Список привязок WPF к списку из нескольких столбцов - PullRequest
1 голос
/ 07 марта 2011

С момента запуска в WPF я все еще пытаюсь понять функциональность привязки данных.

Я пытаюсь использовать список из нескольких столбцов, и мой XAMl выглядит так:

<ListBox Name="RecordList">
    <ListView Name="RecordListView">
        <ListView.View>
             <GridView>
                <GridView.Columns>
                     <GridViewColumn Header="1" Width="Auto" DisplayMemberBinding="{Binding Path=Field1}" />
                     <GridViewColumn Header="2" Width="50" DisplayMemberBinding="{Binding Path=Field2}" />
                     <GridViewColumn Header="3" Width="100" DisplayMemberBinding="{Binding Path=Field3}" />
                </GridView.Columns>
           </GridView>
      </ListView.View>
 </ListView>
</ListBox>

Я просто не могу получить правильный код c # для заполнения элементов из моего списка?

Ответы [ 2 ]

13 голосов
/ 07 марта 2011

Вот как это выглядит в двух словах.

Сначала вы определяете модель, которая хранит ваши данные для привязки.

public sealed class MyListBoxItem
{
  public string Field1 {get;set;}
  public string Field2 {get;set;}
  public string Field3 {get;set;}
}

Теперь у вас должен быть класс, которыйдержит эти модели для привязки.Этот тип часто называют ViewModel;он представляет информацию в представление для привязки на основе пользовательского ввода из представления.Его общедоступными свойствами обычно являются ObservableCollections и DependencyProperties, так что изменения в ViewModel будут автоматически приниматься представлением (пользовательским интерфейсом):

public sealed class MyViewModel
{
  public ObservableCollection<MylistBoxItem> Items {get;private set;}
  public MyViewModel()
  {
    Items = new ObservableCollection<MyListBoxItem>();
    Items.Add(new MyListBoxItem{Field1="One", Field2="Two",Filed3="Three"};
  }
}

В пределах кода для вашего пользовательского интерфейса, «View», вы создаете экземплярваш ViewModel и установите его как DataContext для вашего View.

public MyView()
{
  this.DataContext = new MyViewModel();
}

это важно, так как DataContext «течет» через визуальное дерево.Он доступен каждому дочернему элементу, для которого он установлен.

Чтобы отобразить элементы, я должен связать ItemSource объекта ListView со свойством Items объекта DataContext (это понятно).Каждая строка в ListView имеет свой DataContext, установленный для каждого отдельного MyViewModel в свойстве Items.Таким образом, вы должны привязать каждый элемент отображения к свойствам MyListBoxItem.

<ListView Name="RecordListView" ItemsSource="{Binding Items}">
    <ListView.View>
        <GridView>
            <GridView.Columns>
                <GridViewColumn Header="1" Width="Auto" DisplayMemberBinding="{Binding Path=Field1}" />
                <GridViewColumn Header="2" Width="50" DisplayMemberBinding="{Binding Path=Field2}" />
                <GridViewColumn Header="3" Width="100" DisplayMemberBinding="{Binding Path=Field3}" />
            </GridView.Columns>
        </GridView>
    </ListView.View>
</ListView>

Чтобы лучше понять весь этот процесс, ищите вопросы с высоким рейтингом здесь с тегом [MVVM] .

ТАКЖЕ, чтобы помочь отладить ваши привязки, настройте отладку для подробной привязки данных: Verbose databinding

4 голосов
/ 07 марта 2011

Вам не нужно использовать и listbox, и listview. Либо вы используете listbox с таблицами данных или используйте listview с вашими gridviewcolumns.

Проверьте ссылки ниже, чтобы узнать, как правильно заполнить список

http://www.c -sharpcorner.com / uploadfile / Махеш / wpflistbox08252008100659am / wpflistbox.aspx

http://www.wpftutorial.net/ListBoxDataTemplate.html

http://www.codeproject.com/KB/WPF/CustomListBoxLayoutInWPF.aspx

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

http://msdn.microsoft.com/en-us/library/ms742521.aspx

http://www.codeproject.com/KB/WPF/GuidedTourWPF_4.aspx

http://www.wpftutorial.net/DataTemplates.html

...