0

与えられた、

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

実行すると、グリッドの上に空の新しい行が表示されます。しかし、新しい行のどの列も編集できません!!! 各フィールドを編集可能としてマークすると、列が編集可能になります。

各フィールドを編集可能として明示的にマークせずに、レコードの追加機能を機能させることは可能ですか?

ご関心をお寄せいただきありがとうございます。

4

1 に答える 1

2

あなたは最善の策は、インフラジスティックスのネットアドバンテージフォーラムでこれを尋ねることでしょうが、それを言ったのは...

私が理解しているように、あなたが望むのは、新しいアイテムを追加するための編集可能な行を持つ読み取り専用のデータグリッド(そのセルでは編集不可)です...

  1. の下にCellValuePresenterターゲットを追加します。StyleXamDatagrid.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);
    }
}

お役に立てれば。

于 2011-10-07T08:01:10.723 に答える