WPF将列表绑定到多列ListBox

时间:2011-03-07 13:53:26

标签: wpf binding listbox multiple-columns

从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 个答案:

答案 0 :(得分:13)

简而言之,这就是它的结合方式。

首先,定义一个保存数据以进行绑定的模型。

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

现在,您必须拥有一个包含这些模型以进行绑定的类。这种类型通常称为ViewModel;它根据View中的用户输入向View提供信息以进行绑定。它的公共属性通常是ObservableCollections和DependencyProperties,因此ViewModel中的更改将由View(UI)自动获取:

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"};
  }
}

在UI的代码隐藏中,在“视图”中,您实例化ViewModel并将其设置为View的DataContext。

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

这很重要,因为DataContext“流过”可视化树。它可用于设置它的每个子元素。

要显示项目,我必须将ListView的ItemsSource绑定到DataContext的Items属性(这是可以理解的)。 ListView中的每一行都将其DataContext设置为Items属性中的每个单独的MyViewModel。因此,您必须将每个显示成员绑定到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

答案 1 :(得分:4)

您不必同时使用listbox和listview。您可以使用带有datatemplates的列表框,也可以将listview与gridviewcolumns一起使用。

检查以下链接,了解如何正确填充列表框

http://www.c-sharpcorner.com/uploadfile/mahesh/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