首页 / C# / c# – WPF数据绑定混淆
c# – WPF数据绑定混淆
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – WPF数据绑定混淆,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3326字,纯文字阅读大概需要5分钟。
内容图文
![c# – WPF数据绑定混淆](/upload/InfoBanner/zyjiaocheng/795/044f636d61f34529abbc44b4c64399e1.jpg)
我刚刚开始学习关于WPF的课程,我对与数据绑定相关的一些领域感到有些困惑.我没有语法问题,但很可能犯了一些新手错误,我有几个问题.
我做了一个带有2个文本框的简单屏幕,当我点击一个按钮时,这两个项目被添加到ListBox中.
在XAML的Window标记内引用People类
xmlns:classes="clr-namespace:WPF_Course.Classes"
添加了一个Window资源
<Window.Resources>
<classes:People x:Key="people"/>
</Window.Resources>
这是我如何宣布我的列表框
<ListBox DataContext="{Binding Source={StaticResource people}}"
ItemsSource="{Binding Persons}"
x:Name="PersonListBox">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<StackPanel>
<TextBlock Text="{Binding FullName}"/>
</StackPanel>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
所以,我已经在我的ListBox中添加了一个DataContext,我将它绑定到我的人员资源,并且还添加了一个ItemSource,它查看了我的People中的属性.
这是我的班级
public class People : ObservableCollection<Person>
{
public ObservableCollection<Person> Persons { get { return persons; } set { persons = value; } }
private ObservableCollection<Person> persons = new ObservableCollection<Person>();
public People()
{
for (int i = 0; i < 1; i++)
{
// implicitly I add one item just for messing around with the constructor
Persons.Add(new Person()
{
Name = "Dummy",
LastName = "Dummy",
Age = 15
});
}
}
}
根据我到目前为止所做的,我有以下问题:
1)它们之间有什么区别(它们具有相同的效果,但它背后有更多的推理?)
ItemsSource = "{Binding Persons}"
和
ItemsSource = "{Binding Path = Persons }"
通过离开ItemSource =“{Binding}”,我实际上只是实例化一个People实例,因此我的所有逻辑都是从该类的构造函数中处理的?我已经搞砸了它似乎这样做了,但我不确定.
2)在我的Peoples课上,我实现了ObservableCollection< Person> (人也是一个班级).最初我是从构造函数本身对我的列表进行静态添加,并且我没有在类中定义属性(ObservableCollection< person>属性类型)因此需要它(接口的实现)但现在使用属性我真的需要它?所以我的问题是:
如果我的类的唯一目的是仅从构造函数中加载其集合中的内容(而不是从外部类加载,因此需要某种属性),使用ObservableCollection< myClass>实现我的类是最佳实践吗?或者定义我所做的相同类型的属性? (用于从外部课程访问)
我很抱歉这些奇怪的问题,因为我知道它们听起来有些愚蠢,我正在从验证中看,因为我刚刚开始使用wpf.
谢谢
编辑2:谢谢你的所有答案,我现在明白了.此外,我忘了向您展示我如何在我的收藏中插入数据. (添加了这个编辑让我记住,如果我忘了它,并为其他可能偶然发现这个线程有类似的混乱)
ObservableCollection<Person> ppl;
public MainWindow()
{
InitializeComponent();
person = new Person();
stackPanelPerson.DataContext = person;
people = new People();
ppl = people.Persons;
PersonListBox.ItemsSource = ppl;
}
最初我是这样做的
ppl.Add(new Person() { Name = boxFirstName.Text, LastName = boxLastName.Text, Age = Int32.Parse(boxAge.Text) });
然后我意识到我在我的Person类(INotifyPropertyChanged)上使用了属性的数据绑定,因此我将其更改为:
ppl.Add(new Person() { Name = person.Name, LastName = person.LastName, Age = person.Age});
再次感谢各位回复!!
祝你有美好的一天 !
解决方法:
问题1:
没有,没有区别. {Binding xyz}与{Binding Path = xyz}相同,它几乎就像一个捷径.但它只能用于你在绑定中编写的第一件事,例如,你不能这样做:
{Binding ElementName=myElement, xyz}
相反,你会这样做:
{Binding ElementName=myElement, Path=xyz}
甚至更好:
{Binding xyz, ElementName=myElement}
Here’s一个相关的问题.
问题2:
你所做的是正确的,你的人群应该作为一个财产公开,为什么?因为那时你可以绑定它.
在这种情况下,不需要静态属性.
我强烈建议研究MVVM设计模式.你可以找到一个教程here
内容总结
以上是互联网集市为您收集整理的c# – WPF数据绑定混淆全部内容,希望文章能够帮你解决c# – WPF数据绑定混淆所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。