我有一个类的定义如下:
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"} />但这似乎不正确。有什么想法吗?
发布于 2017-04-14 09:28:54
让我帮助你按照亚历克斯的建议,以正确的方式做这件事。
创建一个列表并在ViewModel中填充它,如下所示
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>就这样!!
发布于 2017-04-14 09:11:13
通常,DataContext将是一个视图模型类,它将包含代理列表的;然后您可以将ItemsSource绑定到该列表。当涉及到这个问题时,许多处理列表框的例子中的任何一个都会非常直接。不太确定如果列表本身是DataContext,那么绑定应该是什么样的。
然后,一旦将ItemsSource设置为代理列表,如果要在列表中显示类别,则更简单的方法是将DisplayMemberPath设置为“类别”。
我建议研究一下MVVM并学习应用它,在我看来,这是一个非常宝贵的概念。
发布于 2017-04-14 09:09:13
我还建议您使用MVVM。但如果你不想那么试试这个。
XAML:
<ListBox Name="AgentCategoryListBox" ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Category}" d:DataContext="{d:DesignData}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>政务司司长:
public MainWindow()
{
InitializeComponent();
List<Agent> agents = new List<Agent>
{
new Agent
{
Category = "Category"
}
};
DataContext = agents;
}
public class Agent
{
public string Category
{
get;
set;
}
}https://stackoverflow.com/questions/43408359
复制相似问题