我最近开始使用XAML和WPF。我刚刚在wpf中创建了一个新项目,并添加了下面的XAML代码。但是......没有任何内容添加到" Listbox.ItemTemplate"或" ListView.ItemTemplate"这件事出现在设计师的窗口中。我究竟做错了什么?这是一个新项目,所以没有添加任何代码隐藏的东西。我用这个抓了15分钟,但没有成功。请帮忙
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid Margin="10">
<ListBox Margin="10">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Name: " />
<TextBlock Text="Age: " />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>
答案 0 :(得分:4)
您应该将ListBox或整个Window绑定到某个DataContext(通常这是带有您需要显示的数据的viewmodel)或明确指定列表的项目。
在您的代码段中,您只指定了商品模板,而不是商品本身。
XAML定义的项目(简单字符串)的示例:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid Margin="10">
<ListBox Margin="10">
<ListBox.Items>
<ListBoxItem>123</ListBoxItem>
<ListBoxItem>456</ListBoxItem>
</ListBox.Items>
</ListBox>
</Grid>
</Window>
DataContext和Bindings的示例。 XAML:
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid Margin="10">
<ListBox Margin="10" ItemsSource="{Binding Path=Persons}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Label>Name:</Label><TextBlock VerticalAlignment="Center" Text="{Binding Path=Name}" />
<Label>Age:</Label><TextBlock VerticalAlignment="Center" Text="{Binding Path=Age}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>
代码隐藏:
namespace WpfApplication3
{
public class PersonViewModel
{
public PersonViewModel(string name, int age)
{
this.name = name;
this.age = age;
}
public string Name
{
get { return name; }
}
private string name;
public int Age
{
get { return age; }
}
private int age;
}
public class MainViewModel
{
public MainViewModel()
{
persons = new ObservableCollection<PersonViewModel>()
{
new PersonViewModel("Lez", 146),
new PersonViewModel("Binja", 158),
new PersonViewModel("Rufus the Destroyer", 9000)
};
}
public ObservableCollection<PersonViewModel> Persons
{
get { return persons; }
}
private ObservableCollection<PersonViewModel> persons;
}
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainViewModel();
}
}
}
重要:在视图模型的可变属性的情况下,不要忘记正确实现INotifyPropertyChanged(例如,如果你有#34的名字设置者;姓名&#34;和&# 34; PersonViewModel的年龄和#34;属性。
答案 1 :(得分:1)
您没有看到任何项目,因为您的ListBox在设计器视图中不包含任何数据。要填充它,列表应绑定到属性&#34; ItemsSource&#34;您的ListBox,或直接将数据添加到属性&#34; Items&#34; (XAML或代码隐藏)。
如果要在设计器视图中正确显示项目,则应该将ViewModel绑定到页面的DataContext,并创建一个&#34;示例数据&#34;文件(例如通过Blend)。
答案 2 :(得分:0)
项目模板主要用于显示自定义数据。只需首先使用简单的字符串项。它将显示在列表框中。