【发布时间】:2018-03-22 17:24:12
【问题描述】:
我有一个 DevExpress GridControl,它使用 Student 类型的 ObservableCollection 作为其 ItemsSource。
我的 GridControl 有四列
Name
ID
Favorite Subject
GPA
姓名、最喜欢的科目和 GPA 是学生的属性,因此它们具有准确的约束力。
问题是,我不想拥有学生 ID 的属性。我想将 ID 设置为 1 + 托管 GridControl 的学生 ObservableCollection 中学生实例的索引。
所以如果我有三个学生,ID 列将显示为
1
2
3
我怀疑我的视图模型中需要一个 Ints 类型的 ObservableCollection,但我无法为 ID 列使用不同的 ItemsSource。我只能引用 GridControl 的 Parent 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>
【问题讨论】:
-
你希望用ID字段做什么?由于它与学生无关,因此每次删除或添加学生到列表时,ID 字段都可能不同。事实上,您是否希望将其与学生联系起来?
-
基本上仅供参考。它用于更直观的控件,为了简洁起见,我宁愿使用 ID 而不是名称。我不想将此属性保留给 Student 的原因是因为无法在此特定视图中从集合中删除项目,我希望在重新打开此特定窗口时重置它们。
标签: c# wpf xaml devexpress