根据 ViewModel 中 属性 的值禁用 XamDataGrid 的行
Disable the rows of a XamDataGrid based on the value of a propery in the ViewModel
在我正在处理的应用程序中,如果用户不是管理员,则不得允许他更改数据。但他必须仍然能够对数据进行只读访问。
如果我禁用网格本身,我将无法滚动记录,也无法使用 infragistics XamDataGrid 的内置过滤功能。我想要实现的是仅禁用数据网格的行,使其处于只读状态。
在 ViewModel 中,我有一个名为 IsAdmin 的布尔值 属性。
private bool _isAdmin;
public bool IsAdmin
{
get { return _isAdmin; }
set { SetProperty(ref _isAdmin, value); }
}
在视图中我有 XamDataGrid 的声明
<igDP:XamDataGrid x:Name="LookupItems" Grid.Row="2" Grid.ColumnSpan="3" Margin="2,4" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderBrush="Black"
BorderThickness="1" Theme="Office2010Blue" ActiveDataItem="{Binding SelectedLookupItem}" DataSource="{Binding SelectedLookupTableLookupItems}" >
<igDP:XamDataGrid.InputBindings>
<KeyBinding Key="Del" Command="{Binding DeleteItemCommand}" />
</igDP:XamDataGrid.InputBindings>
<igDP:XamDataGrid.FieldLayoutSettings>
<igDP:FieldLayoutSettings AllowDelete="True" HighlightAlternateRecords="True" AllowAddNew="True" AutoArrangeCells="LeftToRight"
ResizingMode="Immediate" SelectionTypeRecord="Single" AutoGenerateFields="False" />
</igDP:XamDataGrid.FieldLayoutSettings>
<igDP:XamDataGrid.FieldSettings>
<igDP:FieldSettings AllowRecordFiltering="True" AllowGroupBy="False" />
</igDP:XamDataGrid.FieldSettings>
<igDP:XamDataGrid.FieldLayouts>
<igDP:FieldLayout>
<igDP:FieldLayout.Fields>
<igDP:Field Name="ConvertFrom" Label="From" AllowEdit="True" Width="*"
IsEnabled="{Binding Path=DataContext.IsAdmin, RelativeSource={RelativeSource AncestorType={x:Type igDP:XamDataGrid}}}" >
<igDP:Field.Settings>
<igDP:FieldSettings FilterOperandUIType="TextBox" FilterOperatorDefaultValue="Contains" />
</igDP:Field.Settings>
</igDP:Field>
<igDP:Field Name="ConvertTo" Label="To" AllowEdit="True" Width="*" AllowRecordFiltering="False"
IsEnabled="{Binding Path=DataContext.IsAdmin, RelativeSource={RelativeSource AncestorType={x:Type igDP:XamDataGrid}}}">
</igDP:Field>
</igDP:FieldLayout.Fields>
</igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>
我遇到的问题是数据网格上的字段没有被禁用。我知道我的 属性 正在工作,因为我在页面上有其他控件(文本框、组合框、复选框等),当 IsAdmin 属性 设置为 false 时这些控件被禁用。
我在数据网格中的绑定有问题吗?我不知道是什么问题。
您应该使用 FieldBinding 标记扩展
<igDP:MaskedTextField Name="SKU"
Mask="########-###"
Label="{igDP:FieldBinding SelectedRole.RoleSettings[SKU].ColumnName}"
IsReadOnly="{igDP:FieldBinding SelectedRole.RoleSettings[SKU].IsColumnReadOnly}"/>
在我正在处理的应用程序中,如果用户不是管理员,则不得允许他更改数据。但他必须仍然能够对数据进行只读访问。
如果我禁用网格本身,我将无法滚动记录,也无法使用 infragistics XamDataGrid 的内置过滤功能。我想要实现的是仅禁用数据网格的行,使其处于只读状态。
在 ViewModel 中,我有一个名为 IsAdmin 的布尔值 属性。
private bool _isAdmin;
public bool IsAdmin
{
get { return _isAdmin; }
set { SetProperty(ref _isAdmin, value); }
}
在视图中我有 XamDataGrid 的声明
<igDP:XamDataGrid x:Name="LookupItems" Grid.Row="2" Grid.ColumnSpan="3" Margin="2,4" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" BorderBrush="Black"
BorderThickness="1" Theme="Office2010Blue" ActiveDataItem="{Binding SelectedLookupItem}" DataSource="{Binding SelectedLookupTableLookupItems}" >
<igDP:XamDataGrid.InputBindings>
<KeyBinding Key="Del" Command="{Binding DeleteItemCommand}" />
</igDP:XamDataGrid.InputBindings>
<igDP:XamDataGrid.FieldLayoutSettings>
<igDP:FieldLayoutSettings AllowDelete="True" HighlightAlternateRecords="True" AllowAddNew="True" AutoArrangeCells="LeftToRight"
ResizingMode="Immediate" SelectionTypeRecord="Single" AutoGenerateFields="False" />
</igDP:XamDataGrid.FieldLayoutSettings>
<igDP:XamDataGrid.FieldSettings>
<igDP:FieldSettings AllowRecordFiltering="True" AllowGroupBy="False" />
</igDP:XamDataGrid.FieldSettings>
<igDP:XamDataGrid.FieldLayouts>
<igDP:FieldLayout>
<igDP:FieldLayout.Fields>
<igDP:Field Name="ConvertFrom" Label="From" AllowEdit="True" Width="*"
IsEnabled="{Binding Path=DataContext.IsAdmin, RelativeSource={RelativeSource AncestorType={x:Type igDP:XamDataGrid}}}" >
<igDP:Field.Settings>
<igDP:FieldSettings FilterOperandUIType="TextBox" FilterOperatorDefaultValue="Contains" />
</igDP:Field.Settings>
</igDP:Field>
<igDP:Field Name="ConvertTo" Label="To" AllowEdit="True" Width="*" AllowRecordFiltering="False"
IsEnabled="{Binding Path=DataContext.IsAdmin, RelativeSource={RelativeSource AncestorType={x:Type igDP:XamDataGrid}}}">
</igDP:Field>
</igDP:FieldLayout.Fields>
</igDP:FieldLayout>
</igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>
我遇到的问题是数据网格上的字段没有被禁用。我知道我的 属性 正在工作,因为我在页面上有其他控件(文本框、组合框、复选框等),当 IsAdmin 属性 设置为 false 时这些控件被禁用。
我在数据网格中的绑定有问题吗?我不知道是什么问题。
您应该使用 FieldBinding 标记扩展
<igDP:MaskedTextField Name="SKU"
Mask="########-###"
Label="{igDP:FieldBinding SelectedRole.RoleSettings[SKU].ColumnName}"
IsReadOnly="{igDP:FieldBinding SelectedRole.RoleSettings[SKU].IsColumnReadOnly}"/>