gpt4 book ai didi

带有集合对象的 WPF 数据绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 04:08:28 27 4
gpt4 key购买 nike

我有一个简单的类,定义如下:

public class Person
{
int _id;
string _name;

public Person()
{ }

public int ID
{
get { return _id; }
set { _id = value; }
}

public string Name
{
get { return _name; }
set { _name = value; }
}
}
存储在数据库中,并通过更多代码将其放入 ObservableCollection 对象中,以便稍后尝试在 WPF 中进行数据绑定(bind):
 public class People : ObservableCollection<Person>
{
public People() : base() { }

public void Add(List<Person> pListOfPeople)
{
foreach (Person p in pListOfPeople) this.Add(p);
}
}
在 XAML 中,我自己有一个 ListView,我想在从数据库更新时为“People”对象中的每个项目填充一个 ListViewItem(由一个文本 block 组成)。我还希望该文本 block 绑定(bind)到 Person 对象的“名称”属性。
起初我以为我可以这样做:
lstPeople.DataContext = objPeople;
其中 lstPeople 是我的 XAML 中的 ListView 控件,但这当然什么也不做。我在网上找到了很多例子,人们通过 XAML 创建一个对象,然后通过他们的 XAML 绑定(bind)到它;但不是我们绑定(bind)到实例化对象并相应地重新绘制的地方。
有人可以给我一些指示:
A) 如何将 ListView 控件绑定(bind)到我实例化的“人物”集合对象?
B) 我如何将模板应用到我的 ListView 以针对集合中的对象对其进行格式化?
即使链接到一个体面的示例(请不要在 XAML 中声明的对象上操作),也会受到赞赏。

最佳答案

确实,“安德森·艾姆斯”的回答是正确的(赞成),尽管我有两点评论:

首先,如果你只需要显示一个对象的一个​​属性,我认为使用 ListBox 会更容易更干净。而不是 ListView , 因为绑定(bind)属性的代码会减少到

<ListBox x:Name="lstPeople" DisplayMemberPath="Name" />

其次,如果您使用 WPF 和 Binding,请确保您的对象实现 INotifyPropertyChanged ,以便在 UI 和对象之间始终同步更改。
public class Person : INotifyPropertyChanged
{
int _id;
string _name;

public Person()
{ }

public int ID
{
get { return _id; }
set {
_id = value;
RaisePropertyChanged("ID");
}
}

public string Name
{
get { return _name; }
set {
_name = value;
RaisePropertyChanged("Name");
}
}

pivate void RaisePropertyChanged(string propName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}

}

关于带有集合对象的 WPF 数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2919146/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com