【发布时间】:2017-05-17 07:38:20
【问题描述】:
我有一个这样的DataGrid:
<DataGrid Name="studentGrid" Grid.Row="3" Grid.ColumnSpan="2" AutoGenerateColumns="False" ItemsSource="{Binding Students, Mode=TwoWay}" >
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Header="Student's name" Binding="{Binding StudentName}" />
<DataGridTextColumn IsReadOnly="True" Header="Student's username" Binding="{Binding StudentUserName}" />
<DataGridTextColumn IsReadOnly="True" Header="Date of application" Binding="{Binding DateOfApplication}" />
<DataGridTextColumn IsReadOnly="False" Header="Student's grade" Binding="{Binding StudentGrade}"/>
</DataGrid.Columns>
</DataGrid>
这正在工作,但是,我想添加一些功能,即如果等级高于 1,我希望 Student's grade 列变为只读。我一直看到像 this 这样的解决方案,人们以编程方式使用 DataGridVIEW 的地方。但是,我似乎无法将 DataGridVIEW 添加到我的 XAML,只能添加一个 DataGrid。当我尝试做类似的事情时:
public MainWindow()
{
foreach (var row in studentGrid)
{
if (row[3] > 1) {
row[3].isReadOnly = false;
}
}
InitializeComponent();
}
我不能,因为 DataGrid 没有枚举器。我也不能用studentGrid.Row之类的东西访问它的行。
所以我的问题是,DataGrid 与 DataGridView 的使用有何不同,如何添加 if-else 验证以使 DataGrid 列中的某些行可编辑,而其他行不能?
谢谢!
更新
所以我创建了一个转换器,但我在使用它时遇到了问题。我正在尝试在 XAML 中引用它:
<Window x:Class="TanulmanyiRendszer.Admin.View.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
xmlns:viewModel="clr-namespace:TanulmanyiRendszer.Admin.ViewModel"
Title="Courses" Height="600" Width="500">
<Window.Resources>
<viewModel:GradeToReadOnlyConverter x:Key="converter" />
</Window.Resources>
但我得到一个错误:
命名空间中不存在名称“GradeToReadOnlyConverter” “clr 命名空间:TanulmanyiRendszer.Admin.ViewModel”。
即使转换器显然存在于该命名空间中:
namespace TanulmanyiRendszer.Admin.ViewModel
{
public class GradeToReadOnlyConverter : IValueConverter
{
【问题讨论】:
-
您可以将数据网格的 IsReadOnly dp 绑定到 ViewMdel 中的属性,并使用转换器根据 StudentGrade 属性进行切换。
-
@AbhinavSharma 谢谢,我在添加转换器时遇到了另一个问题。我已经更新了帖子。
标签: c# wpf datagridview datagrid