C# 从代码隐藏将自定义列表对象属性绑定到textbox
学生班C# 从代码隐藏将自定义列表对象属性绑定到textbox,c#,wpf,binding,C#,Wpf,Binding,学生班 public class Student { string name; List<SubjectInfo> subjectInfoList; .... } public class SubjectInfo { string subjectCode; int marks; ... } 我想在窗口上显示学生对象详细信息。由于列表具有不同数量的对象计数,我从代码隐藏中生成了这些 int i
public class Student
{
string name;
List<SubjectInfo> subjectInfoList;
....
}
public class SubjectInfo
{
string subjectCode;
int marks;
...
}
我想在窗口上显示学生对象详细信息。由于列表具有不同数量的对象计数,我从代码隐藏中生成了这些
int i = 10;
foreach (SubjectInfo info in student.SubjectInfoList)
{
TextBox tb = new TextBox();
tb.Width = 200;
tb.Height = 20;
tb.Margin = new Thickness(10, i, 0, 0);
StudentDataGrid.Children.Add(tb);
i += 60;
}
我想从代码隐藏中绑定这个列表。但我不知道该怎么做。我想绑定
student.subjectInfo列表
请帮助我使用codebehind中的绑定列表对象属性
int i = 10;
foreach (SubjectInfo info in student.SubjectInfoList)
{
TextBox tb = new TextBox();
tb.Width = 200;
tb.Height = 20;
tb.Margin = new Thickness(10, i, 0, 0);
StudentDataGrid.Children.Add(tb);
i += 60;
}
编辑
这是示例学生对象
Student student = new Student("Joe", new List<SubjectInfo>() { new SubjectInfo("Subject1", 50), new SubjectInfo("Subject2", 70)});
Student-Student=newstudent(“乔”,newlist(){new SubjectInfo(“Subject1”,50),new SubjectInfo(“Subject2”,70)});
我的窗户应该是这样的
注意如果学生做了4个科目,那么总的文本框
计数是5。最好用XAML做。
但是,如果您真的想在代码隐藏中实现它,请尝试以下方法。
主题信息的字段必须是公共的
foreach (SubjectInfo info in student.SubjectInfoList)
{
TextBox tb = new TextBox();
///...
tb.DataContext = info;
Binding binding = new Binding("marks");
tb.SetBinding(TextBox.TextProperty, binding);
///...
}
纯XAML溶液:
<Window (... your window attributes) >
....
<Grid x:Name="StudentDataGrid">
<ListView ItemsSource="{Binding SubjectInfoList}">
<ListView.ItemTemplate>
<DataTemplate DataType="{x:Type local:SubjectInfo}">
<TextBox Text="{Binding Marks}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Window>
更新
XAML:
守则:
using System.Collections.Generic;
using System.Windows;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Student student = new Student("Joe", new List<SubjectInfo>() { new SubjectInfo("Subject1", 50), new SubjectInfo("Subject2", 70) });
StudentGrid.DataContext = student;
}
}
public class Student
{
public string Name { get; set; }
public List<SubjectInfo> SubjectInfoList { get; set; }
public Student(string name, List<SubjectInfo> list)
{
Name = name;
SubjectInfoList = list;
}
}
public class SubjectInfo
{
public string SubjectCode { get; set; }
public int Marks { get; set; }
public SubjectInfo(string subjectCode, int marks)
{
SubjectCode = subjectCode;
Marks = marks;
}
}
}
使用System.Collections.Generic;
使用System.Windows;
命名空间WpfApplication1
{
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
学生=新学生(“乔”,新列表(){新主题信息(“主题1”,50),新主题信息(“主题2”,70)});
StudentGrid.DataContext=student;
}
}
公立班学生
{
公共字符串名称{get;set;}
公共列表主题信息列表{get;set;}
公立学生(字符串名称、列表)
{
名称=名称;
主题信息列表=列表;
}
}
公共类主题信息
{
公共字符串SubjectCode{get;set;}
公共整数标记{get;set;}
公共主题信息(字符串主题代码,整数标记)
{
主题代码=主题代码;
分数=分数;
}
}
}
您使用的是什么,WPF还是Winforms?WPF和我想从代码隐藏中进行绑定。为什么要从代码隐藏中进行绑定?你绑定到什么控件?因为不同的学生可以有不同的计数。窗口将显示学生信息。我想将marks属性绑定到文本框。例如,如果一个给定的学生做了5个科目List
count是5。我想生成5个文本框并显示该文本框上的标记,然后您可以在XAML中完成所有操作。为什么我没有选择列表视图
是因为此窗口类似于表单:(@NewDeveloper我已经更新了我的帖子。如果你有任何问题,请问我。但现在我必须回家了;)。好的。谢谢如果我有问题,我一定会问@新开发者这个主意不好,但还行。它解决了您的问题,但它不是处理WPF和数据绑定的正确方法。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<Grid x:Name="StudentGrid">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Text="Student name :" Grid.Row="0" Grid.Column="0"/>
<TextBlock Text="Student marks :" Grid.Row="1" Grid.Column="0"/>
<TextBox Text="{Binding Name}" Grid.Row="0" Grid.Column="1" />
<ListView Grid.Row="1" Grid.Column="1" ItemsSource="{Binding SubjectInfoList}" BorderThickness="0">
<ListView.ItemTemplate>
<DataTemplate DataType="{x:Type local:SubjectInfo}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="{Binding SubjectCode}"/>
<TextBox Grid.Column="1" Text="{Binding Marks}"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
</Window>
using System.Collections.Generic;
using System.Windows;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Student student = new Student("Joe", new List<SubjectInfo>() { new SubjectInfo("Subject1", 50), new SubjectInfo("Subject2", 70) });
StudentGrid.DataContext = student;
}
}
public class Student
{
public string Name { get; set; }
public List<SubjectInfo> SubjectInfoList { get; set; }
public Student(string name, List<SubjectInfo> list)
{
Name = name;
SubjectInfoList = list;
}
}
public class SubjectInfo
{
public string SubjectCode { get; set; }
public int Marks { get; set; }
public SubjectInfo(string subjectCode, int marks)
{
SubjectCode = subjectCode;
Marks = marks;
}
}
}