【问题标题】:Disable the rows of a XamDataGrid based on the value of a propery in the ViewModel根据 ViewModel 中的属性值禁用 XamDataGrid 的行
【发布时间】:2016-10-18 14:53:37
【问题描述】:

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

如果我禁用了网格本身,我将无法滚动浏览记录,也无法使用 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 时,页面上有其他控件(文本框、组合框、复选框等)被禁用。

我在数据网格中的绑定有问题吗?我不知道是什么问题。

【问题讨论】:

    标签: wpf mvvm prism infragistics


    【解决方案1】:

    您应该使用 FieldBinding 标记扩展

    http://help.infragistics.com/doc/WPF/2016.1/CLR4.0/?page=xamDataGrid_Binding_Field_FieldLayout_to_MVVM.html

    <igDP:MaskedTextField Name="SKU" 
        Mask="########-###"
        Label="{igDP:FieldBinding SelectedRole.RoleSettings[SKU].ColumnName}" 
        IsReadOnly="{igDP:FieldBinding SelectedRole.RoleSettings[SKU].IsColumnReadOnly}"/>
    

    【讨论】:

    • 谢谢,使用 igDP:FieldBinding 解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    相关资源
    最近更新 更多