首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在WPF中将数据从DataContext传递到ListBox?

如何在WPF中将数据从DataContext传递到ListBox?
EN

Stack Overflow用户
提问于 2017-04-14 08:57:01
回答 6查看 5.4K关注 0票数 0

我有一个类的定义如下:

代码语言:javascript
运行
复制
public class Agent 
{
    public int Id { get; set; }

    public string Category { get; set; }

    // rest removed for brevity 
}

然后,在WPF中,我以List的形式获取数据,并将其传递给DataContext,如下所示:

代码语言:javascript
运行
复制
List<Agent> agents; // this includes my data
this.DataContext = agents;

.xaml部分中,我想列出每个对象的Category字段。我有这样的事情:

代码语言:javascript
运行
复制
<ListBox
    Name="agentCategoryListBox"
    Grid.Row="2"
    Grid.Column="1"
    ItemSource="{Binding Path=Category"} />

但这似乎不正确。有什么想法吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-04-14 09:28:54

让我帮助你按照亚历克斯的建议,以正确的方式做这件事。

创建一个列表并在ViewModel中填充它,如下所示

ViewModel

代码语言:javascript
运行
复制
public class MainWindowViewModel : INotifyPropertyChanged
    {

        public MainWindowViewModel()
        {
            agents = new ObservableCollection<Agent>();
            LoadData();
        } 


    private void LoadData()
        {            
            agents.Add(new Agent { Id = 1, Category = "a" });
            agents.Add(new Agent { Id = 2, Category = "b" });
            agents.Add(new Agent { Id = 3, Category = "c" });
        }
    }

在XAML中,生成列表并使用如下数据模板:

代码语言:javascript
运行
复制
    <Window.Resources>
        <DataTemplate x:Key="AItemTemplate">
            <TextBlock Text="{Binding Category}"></TextBlock>
        </DataTemplate>
    </Window.Resources>

<ListBox ItemsSource="{Binding agents}" 
         ItemTemplate="{StaticResource AItemTemplate}"></ListBox>

就这样!!

票数 1
EN

Stack Overflow用户

发布于 2017-04-14 09:11:13

通常,DataContext将是一个视图模型类,它将包含代理列表的;然后您可以将ItemsSource绑定到该列表。当涉及到这个问题时,许多处理列表框的例子中的任何一个都会非常直接。不太确定如果列表本身是DataContext,那么绑定应该是什么样的。

然后,一旦将ItemsSource设置为代理列表,如果要在列表中显示类别,则更简单的方法是将DisplayMemberPath设置为“类别”。

我建议研究一下MVVM并学习应用它,在我看来,这是一个非常宝贵的概念。

票数 1
EN

Stack Overflow用户

发布于 2017-04-14 09:09:13

我还建议您使用MVVM。但如果你不想那么试试这个。

XAML:

代码语言:javascript
运行
复制
<ListBox Name="AgentCategoryListBox" ItemsSource="{Binding}">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding Category}" d:DataContext="{d:DesignData}" />
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

政务司司长:

代码语言:javascript
运行
复制
public MainWindow()
{
  InitializeComponent();

  List<Agent> agents = new List<Agent>
  {
    new Agent
    {
      Category = "Category"
    }
  };

  DataContext = agents;
}

public class Agent
{
  public string Category
  {
    get;
    set;
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43408359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档