c# - 使用数据绑定(bind)获取 WPF Listview 以显示 ObservableCollection<T>

标签 c# .net wpf binding observablecollection

我有一个 Project 类型的可观察集合,我想将其显示在 ListView 中,但我真的不明白没有向我的 ListView 添加任何内容

我的主窗口.xaml

            <ListView Name="ListViewProjects" Grid.Column="0" Grid.RowSpan="3" SelectionChanged="ListViewProjectsSelectionChanged" ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" MinWidth="100">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <WrapPanel>
                        <TextBlock Text="{Binding Path=ProjectID}"/>
                        <TextBlock Text="{Binding Path=ProjectName}"/>
                    </WrapPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>

我的主窗口.cs

    public partial class MainWindow : Window
{
    ObservableCollection<Project> Projects = new ObservableCollection<Project>();
    ObservableCollection<Employee> Employees = new ObservableCollection<Employee>();

    public MainWindow()
    {
        InitializeComponent();

        DataContext = Projects;

        Project pro1 = new Project(1, "Swordfish");
        Projects.Add(pro1);
        Employee empMads = new Employee("Mads", 1);
        Employee empBrian = new Employee("Brian", 2);
        Employees.Add(empMads);
        Employees.Add(empBrian);
    }

    private void ListViewProjectsSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
    }
}

还有我的 Project.cs,它是类文件

[Serializable]
class Project : INotifyPropertyChanged
{
    public Project(int id, string name)
    {
        ID = id;
        Name = name;
    }

    private int id;
    public int ID
    {
        get { return id; }
        set
        {
            id = value;
            NotifyPropertyChanged("ProjectID");
        }
    }

    private string name;
    public string Name
    {
        get { return name; }
        set
        {
            name = value;
            NotifyPropertyChanged("ProjectName");
        }
    }

    [field: NonSerialized]
    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }
}

但我的列表中没有添加任何内容,我看不出我缺少什么才能正常工作。

我把它作为一个可观察的集合 我做 DataContext = 集合 我在 xaml 文件中进行绑定(bind)

编辑代码部分 1:

        public ObservableCollection<Project> Projects { get; set; }
    public ObservableCollection<Employee> Employees { get; set; }

    public MainWindow()
    {
        InitializeComponent();
        Projects = new ObservableCollection<Project>();
        Employees = new ObservableCollection<Employee>();

        DataContext = Projects;

最佳答案

这是因为您使用像 ProjectID 这样的绑定(bind)路径,而您的 Project 类具有属性 IDProjectNameName 属性也是如此。

E: 当您遇到绑定(bind)问题时,在 visual studio 的 Debug模式下查看 Output 选项卡以查看从数据绑定(bind)引擎返回了哪些错误非常有用。这些异常通常不会返回给用户,但您可以在那里检查它们。

关于c# - 使用数据绑定(bind)获取 WPF Listview 以显示 ObservableCollection<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4680653/

相关文章:

c# - 如何获取自定义用户控件内的所有文本框?

c# - 使用 C# 设计模式

wpf - 如何实现添加/删除列表项的淡入和淡出

wpf - 使 silverlight UserControl 填充内容控件中的可用空间

c# - 在 .NET 数组内部绑定(bind) JSON 对象

c# - WCF 中的 JsonConvert.DeserializeObject 和 "d"包装器

c# - 无法在存储库构造函数中创建服务范围 asp.net core

.net - 寻找解决方案,将对多个主机的 http 请求限制在可以承受的范围内,同时最大化吞吐量

c# - 如何从 DevExpress LookupEdit 中获取选定的值?

wpf - 仅当某些条件为真时,通过 Binding 将 TextBlock 设为粗体