Ingragistic XamGrid: новая запись не редактируется - PullRequest
0 голосов
/ 07 октября 2011

Учитывая,

    <igDP:XamDataGrid Name="dataGrid" 
                          DataSource="{Binding RecordList}">
            <igDP:XamDataGrid.FieldLayoutSettings >
                <igDP:FieldLayoutSettings AllowAddNew="true" AddNewRecordLocation="OnTopFixed"/>
            </igDP:XamDataGrid.FieldLayoutSettings>

При запуске я вижу новую пустую строку в верхней части сетки.Но ни один из столбцов в новой строке не редактируется !!!Столбцы доступны для редактирования, когда я отмечаю каждое из полей как редактируемое.

Возможно ли, чтобы функционал добавления записи работал, хотя "без" явно помечал каждое из полей как редактируемое?

Спасибодля вашего интереса.

1 Ответ

2 голосов
/ 07 октября 2011

Лучше всего спросить об этом на форуме netadvantage Infragistics, но, сказав, что ...

Насколько я понимаю, вам нужна таблица данных только для чтения (не редактируемая в ее ячейках) с редактируемой строкой для добавления нового элемента ...

  1. Добавить CellValuePresenter целевой Style в XamDatagrid.Resources.
  2. Это проверит, сфокусирован ли данный предъявитель значения ячейки и представляет новую строку добавления.
  3. Если это так, родительское поле станет редактируемым с помощью некоторого прикрепленного поведения.

    <igDP:XamDataGrid Grid.Row="1"
                      DataSource="{Binding}"
                      AutoFit="True">
        <igDP:XamDataGrid.Resources>
            <Style TargetType="{x:Type igDP:CellValuePresenter}">
                <Style.Triggers>
                    <MultiDataTrigger>                           
                        <MultiDataTrigger.Conditions>
                            <Condition Binding="{Binding IsFocused,
                                       RelativeSource={RelativeSource Self}}"
                                       Value="True"/>
                            <Condition Binding="{Binding Record.IsAddRecord,
                                       RelativeSource={RelativeSource Self}}"
                                       Value="True"/>
                        </MultiDataTrigger.Conditions>
                        <Setter 
                            Property="local:CellValuePresenterBehavior.AllowFieldEdit"
                            Value="True"/>
                    </MultiDataTrigger>
                </Style.Triggers>
            </Style>
        </igDP:XamDataGrid.Resources>
        <igDP:XamDataGrid.FieldLayouts>
            <igDP:FieldLayout>
                <!-- Only show the first 4 fields to keep the display simple -->
                <igDP:Field Name="Key" Visibility="Visible">                        
                    <igDP:Field.Settings>
                        <igDP:FieldSettings
                                 EditAsType="{x:Type System:String}"
                            EditorType="{x:Type Editors:XamTextEditor}" 
                                 AllowEdit="False"/>
                    </igDP:Field.Settings>
                </igDP:Field>
                <igDP:Field Name="Value" Visibility="Visible">
                    <igDP:Field.Settings>
                        <igDP:FieldSettings
                                 EditAsType="{x:Type System:String}"
                            EditorType="{x:Type Editors:XamTextEditor}" 
                                 AllowEdit="False"/>
                    </igDP:Field.Settings>
                </igDP:Field>
            </igDP:FieldLayout>
        </igDP:XamDataGrid.FieldLayouts>
        <igDP:XamDataGrid.FieldLayoutSettings>
            <igDP:FieldLayoutSettings AutoGenerateFields="False"
                                      AllowAddNew="True"
                                      AddNewRecordLocation="OnTopFixed"
                                      HighlightAlternateRecords="True"/>
        </igDP:XamDataGrid.FieldLayoutSettings>
    </igDP:XamDataGrid>
    

И прикрепленное поведение, как показано ниже ...

public class CellValuePresenterBehavior
{
    public static DependencyProperty AllowFieldEditProperty
        = DependencyProperty.RegisterAttached(
            "AllowFieldEdit",
            typeof(bool),
            typeof(CellValuePresenterBehavior),
            new PropertyMetadata(false, OnAllowFieldEditChanged));

    private static void OnAllowFieldEditChanged(
        DependencyObject depObj,
        DependencyPropertyChangedEventArgs args)
    {
        var cvp = depObj as CellValuePresenter;
        if (cvp != null)
        {
            cvp.Field.Settings.AllowEdit = (bool)args.NewValue;
        }
    }

    public static bool GetAllowFieldEdit(DependencyObject depObj)
    {
        return (bool) depObj.GetValue(AllowFieldEditProperty);
    }

    public static void SetAllowFieldEdit(DependencyObject depObj, bool value)
    {
        depObj.SetValue(AllowFieldEditProperty, value);
    }
}

Надеюсь, это поможет.

...