WPF控件未显示在ItemTemplate(Listbox / ListView)中

911*_*pid 0 c# wpf xaml

我最近开始使用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>
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Nip*_*ris 5

您应该将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>
Run Code Online (Sandbox Code Playgroud)

具有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>
Run Code Online (Sandbox Code Playgroud)

代码背后:

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

重要说明:如果视图模型的属性可变(例如,如果您将拥有PersonViewModel的“名称”和“年龄”属性的设置器),请不要忘记正确实现INotifyPropertyChanged。