【发布时间】:2020-04-06 11:01:00
【问题描述】:
我正在尝试将具有DataTemplate 的combobox 绑定到由静态方法Populate() 生成的类列表。
在分配combo1.ItemsSource = Peoplelist; 代码隐藏时,ui 中的combobox 项目正在更新,但是当我在xaml 中进行绑定时:ItemsSource="{Binding Path=Peoplelist}" 不是。我错过了什么?
MainWindow.xaml.cs
using System;
using System.Collections.Generic;
using System.Windows;
namespace WpfTest
{
public partial class MainWindow : Window
{
public List<People> Peoplelist;
public MainWindow()
{
Peoplelist = new List<People>();
People.Populate(Peoplelist);
InitializeComponent();
//combo1.ItemsSource = Peoplelist; //working
}
}
public class People
{
public string FirstName { get; set; }
public string LastName { get; set; }
public People() { }
public People(String _FirstName, String _FamilyName)
{
FirstName = _FirstName;
LastName = _FamilyName;
}
public static void Populate(List<People> lst)
{
lst.Add(new People
{
FirstName = "Jon",
LastName = "Jonathan",
});
lst.Add(new People
{
FirstName = "Mark",
LastName = "Markthan",
});
lst.Add(new People
{
FirstName = "Spence",
LastName = "Spencer",
});
}
}
}
MainWindow.xaml
<Window x:Class="WpfTest.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<ComboBox Name="combo1" VerticalAlignment="Center" HorizontalAlignment="Center" MinWidth="200"
SelectedValuePath="LastName" ItemsSource="{Binding Path=Peoplelist}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}"/>
<TextBlock Text="--"/>
<TextBlock Text="{Binding LastName}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</Grid>
</Window>
【问题讨论】:
-
注意
combo1.ItemsSource = Peoplelist;不是绑定,只是一个普通的赋值。 -
更好的使用接口
INotifyPropertyChanged。会让生活更轻松。 docs.microsoft.com/en-us/dotnet/api/…
标签: c# wpf xaml data-binding