1

自从开始使用 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# 代码来填充列表中的项目?

4

2 回答 2

13

简而言之,这就是它组合在一起的方式。

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

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

现在,您必须有一个类来保存这些模型以进行绑定。这种类型通常称为 ViewModel;它根据来自视图的用户输入向视图提供信息以进行绑定。它的公共属性通常是 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 并将其设置为您的视图的 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]的高评分问题。

此外,为了帮助调试您的绑定,为详细数据绑定配置调试: 详细数据绑定

于 2011-03-07T14:05:34.333 回答
4

您不必同时使用列表框和列表视图。您可以将列表框与数据模板一起使用,也可以将列表视图与您的网格视图列一起使用。

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

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

于 2011-03-07T14:01:31.190 回答