gpt4 book ai didi

c# - 如何将 GridColumn 绑定(bind)到 ObservableCollection 的索引值?

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:33 26 4
gpt4 key购买 nike

我有一个 DevExpress GridControl,它使用 Student 类型的 ObservableCollection 作为其 ItemsSource。

我的 GridControl 有四列

Name
ID
Favorite Subject
GPA

姓名、最喜欢的科目和 GPA 是学生的属性,因此它们具有准确的约束力。

问题是,我不想为学生提供 ID 属性。我想将 ID 设置为 1 + Student 实例在托管 GridControl 的学生的 ObservableCollection 中的索引。

所以如果我有三个学生,ID 列将显示为

1
2
3

我怀疑我的 View 模型中需要一个 Ints 类型的 ObservableCollection,但我无法为 ID 列使用不同的 ItemsSource。我只能引用 GridControl 的父 ItemsSource。由于 ItemsSource 是 Student 类型的 ObservableCollection,而 ID 不是 Student 的属性,因此我似乎无法将列设置为适当的值(如上所述)。

<dxg:GridControl Style="{StaticResource StudentsGridControl}"
ItemsSource="{Binding StudentsCollection}" SelectedItem="{Binding SelectedStudent}">
<dxg:GridControl.Columns>
<dxg:GridColumn Width="200" HorizontalHeaderContentAlignment="Center" Binding="{Binding Name, UpdateSourceTrigger=PropertyChanged}">
<dxg:GridColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="Student Name" Style="{StaticResource BaseColumnHeaderStyle}"/>
</DataTemplate>
</dxg:GridColumn.HeaderTemplate>
<dxg:GridColumn.HeaderStyle>
<Style TargetType="Control">
<Setter Property="Background" Value="#22322"/>
</Style>
</dxg:GridColumn.HeaderStyle>
</dxg:GridColumn>
<dxg:GridColumn Width="50" HorizontalHeaderContentAlignment="Center"
Binding= // This is the ID Column
<dxg:GridColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="ID" Style="{StaticResource BaseColumnHeaderStyle}"/>
</DataTemplate>
</dxg:GridColumn.HeaderTemplate>
<dxg:GridColumn.HeaderStyle>
<Style TargetType="Control">
<Setter Property="Background" Value="#123453"/>
</Style>
</dxg:GridColumn.HeaderStyle>
</dxg:GridColumn>
<dxg:GridColumn Width="230" HorizontalHeaderContentAlignment="Center" Binding="{Binding FavoriteSubject, UpdateSourceTrigger=PropertyChanged}">
<dxg:GridColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="Favorite Subject" Style="{StaticResource BaseColumnHeaderStyle}"/>
</DataTemplate>
</dxg:GridColumn.HeaderTemplate>
<dxg:GridColumn.HeaderStyle>
<Style TargetType="Control">
<Setter Property="Background" Value="#52648F"/>
</Style>
</dxg:GridColumn.HeaderStyle>
</dxg:GridColumn>
<dxg:GridColumn Width="50" HorizontalHeaderContentAlignment="Center" Binding="{Binding GPA, UpdateSourceTrigger=PropertyChanged}">
<dxg:GridColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="GPA"Style="{StaticResource BaseColumnHeaderStyle}"/>
</DataTemplate>
</dxg:GridColumn.HeaderTemplate>
<dxg:GridColumn.HeaderStyle>
<Style TargetType="Control">
<Setter Property="Background" Value="#52658F"/>
</Style>
</dxg:GridColumn.HeaderStyle>
</dxg:GridColumn>
</dxg:GridControl.Columns>
<dxg:GridControl.View>
<dxg:TableView Style="{StaticResource StudensTable}"/>
</dxg:GridControl.View>
</dxg:GridControl>

最佳答案

只需为您的 Student 类创建一个 StudentViewModel,不要忘记更改您的 StudentsCollection成为ObservableCollection<StudentViewModel> . ViewModels 用于避免将模型直接绑定(bind)到 View ,它还允许您在不影响模型的情况下声明其他属性,例如 ID。在这种情况下。

假设这是您的学生类:

public class Student
{
public string Name { get; set; }
public string FavoriteSubject { get; set; }
public string GPA { get; set; }
}

您的 StudentViewModel 可能是这样的:

public class StudentViewModel
{
private Student _student;

public StudentViewModel(Student student, int id)
{
_student = student;
ID = id;
}

public int ID { get; set; }

public string Name
{
get { return _student.Name; }
set { _student.Name = value; }
}

public string FavoriteSubject
{
get { return _student.FavoriteSubject; }
set { _student.FavoriteSubject = value; }
}

public string GPA
{
get { return _student.GPA; }
set { _student.GPA = value; }
}
}

关于c# - 如何将 GridColumn 绑定(bind)到 ObservableCollection 的索引值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49434851/

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