Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 基于ViewModel中属性的值禁用XamDataGrid的行_Wpf_Mvvm_Prism_Infragistics - Fatal编程技术网

Wpf 基于ViewModel中属性的值禁用XamDataGrid的行

Wpf 基于ViewModel中属性的值禁用XamDataGrid的行,wpf,mvvm,prism,infragistics,Wpf,Mvvm,Prism,Infragistics,在我正在处理的应用程序中,如果用户不是管理员,则不得允许他更改数据。但他必须仍然能够以只读方式访问数据 如果禁用了网格本身,则无法滚动记录,也无法使用infragistics XamDataGrid的内置过滤功能。我想要实现的是仅禁用datagrid的行,使其处于只读状态 在ViewModel中,我有一个名为IsAdmin的布尔属性 private bool _isAdmin; public bool IsAdmin { get { return _isA

在我正在处理的应用程序中,如果用户不是管理员,则不得允许他更改数据。但他必须仍然能够以只读方式访问数据

如果禁用了网格本身,则无法滚动记录,也无法使用infragistics XamDataGrid的内置过滤功能。我想要实现的是仅禁用datagrid的行,使其处于只读状态

在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>

我的问题是datagrid上的字段没有被禁用。我知道我的属性正在工作,因为当IsAdmin属性设置为false时,页面上的其他控件(文本框、组合框、复选框等)被禁用


我在datagrid中的绑定是否有问题?我不知道问题出在哪里。

您应该使用FieldBinding标记扩展


谢谢,使用igDP:FieldBinding解决了我的问题。
<igDP:MaskedTextField Name="SKU" 
    Mask="########-###"
    Label="{igDP:FieldBinding SelectedRole.RoleSettings[SKU].ColumnName}" 
    IsReadOnly="{igDP:FieldBinding SelectedRole.RoleSettings[SKU].IsColumnReadOnly}"/>