学生班
public class Student
{
string name;
List<SubjectInfo> subjectInfoList;
....
}
List<SubjectInfo>
列表可以为不同的学生提供不同数量的SubjectInfo
个对象。
SubjectInfo struct
public struct SubjectInfo
{
string subjectCode;
int marks;
...
}
我想在窗口上显示学生对象的详细信息。由于列表具有不同数量的对象计数,因此我使用了ItemsControl
并使用了dataTemplate。
绑定学生对象非常有效。
Student student = new Student("Joe", new List<SubjectInfo>() { new SubjectInfo("Subject1", 50), new SubjectInfo("Subject2", 70) });
StudentGrid.DataContext = student;
但是这个TwoWay
绑定不适用于SubjectInfo
(来自UI的更改值不会被代码隐藏)
但如果将 SubjectInfo结构更改为 SubjectInfo类,则可以正常工作。
无法理解为什么。请指教。
答案 0 :(得分:4)
通过将SubjectInfo
分配给DataContext
,它会被复制(因为它是struct
/ ValueType
),这就是绑定不起作用的原因。在大多数情况下,这不是你想要的。我建议您使用SubjectInfo
的课程代替。
您应该了解class
和struct
之间的差异。 C# Specification (V4.0)总结了这些(在第11.3节中):
System.ValueType
(第11.3.2节)。 null
(第11.3.4节)而生成的值。 object
之间进行转换(第11.3.5节)。 this
的含义因结构而异(§7.6.7)。答案 1 :(得分:1)
Struct是一种值类型,绑定将获取它的副本,因此永远不会更新原始对象。