我的课程定义如下:
public class Agent
{
public int Id { get; set; }
public string Category { get; set; }
// rest removed for brevity
}
然后,在WPF中,我将数据作为List
并将其传递给DataContext
,如下所示:
List<Agent> agents; // this includes my data
this.DataContext = agents;
在.xaml
部分,我想列出每个对象的Category
字段。我有这样的事情:
<ListBox
Name="agentCategoryListBox"
Grid.Row="2"
Grid.Column="1"
ItemSource="{Binding Path=Category"} />
但这似乎无法正常工作。有什么想法吗?
答案 0 :(得分:1)
通常,DataContext是一个视图模型类,它将包含代理列表;然后你可以将ItemsSource绑定到该列表。处理列表框的许多示例中的任何一个都非常直接。如果列表本身是DataContext,则不确定绑定应该如何。
然后,一旦ItemsSource设置为代理列表,如果要在列表中显示Category,更简单的方法是将DisplayMemberPath设置为“Category”。
我建议调查MVVM并学习应用它,在我看来这是一个非常宝贵的概念。
答案 1 :(得分:1)
让我帮助你按照亚历克斯建议的正确方式做到这一点。
创建一个列表并在ViewModel中填充它,如下所示
视图模型
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中,制作列表并使用如下数据模板:
<Window.Resources>
<DataTemplate x:Key="AItemTemplate">
<TextBlock Text="{Binding Category}"></TextBlock>
</DataTemplate>
</Window.Resources>
<ListBox ItemsSource="{Binding agents}"
ItemTemplate="{StaticResource AItemTemplate}"></ListBox>
就是这样!!
答案 2 :(得分:0)
我也建议你使用MVVM。但如果你不想尝试这个。
XAML:
<ListBox Name="AgentCategoryListBox" ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Category}" d:DataContext="{d:DesignData}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
CS:
public MainWindow()
{
InitializeComponent();
List<Agent> agents = new List<Agent>
{
new Agent
{
Category = "Category"
}
};
DataContext = agents;
}
public class Agent
{
public string Category
{
get;
set;
}
}
答案 3 :(得分:0)
您尝试将列表框绑定到字符串属性。
你可以试试这个: 为exemle myUC指定用户控件的名称 将属性添加到用户控件:
public List<Agent> AgentList { get; set; };
填写您的座席列表:
this.AgentList = //fill method
并像这样绑定你的列表框:
<ListBox
Name="agentCategoryListBox"
Grid.Row="2"
Grid.Column="1"
ItemSource="{Binding Path=AgentList, ElementName=myUC"} />
答案 4 :(得分:0)
答案 5 :(得分:0)
获得所需内容的最快方法是:
<ListBox
Name="agentCategoryListBox"
Grid.Row="2"
DisplayMemberPath="Category"
Grid.Column="1"
ItemSource="{Binding Path=."} />
ItemsSource直接绑定到您的Datacontext(这是您的列表)然后您告诉您的ListBox显示属性Category。
但正确的方法是:
1 - 创建DataContext
public class AgentsDC
{
public List<Agent> Agents { get; set; }
}
2 - 将此类作为DataContext
this.DataContext = new AgentsDC();
3 - 绑定所有这些东西
<ListBox
Name="agentCategoryListBox"
Grid.Row="2"
DisplayMemberPath="Category"
Grid.Column="1"
ItemSource="{Binding Path=Agents"} />