あなたは最善の策は、インフラジスティックスのネットアドバンテージフォーラムでこれを尋ねることでしょうが、それを言ったのは...
私が理解しているように、あなたが望むのは、新しいアイテムを追加するための編集可能な行を持つ読み取り専用のデータグリッド(そのセルでは編集不可)です...
- の下に
CellValuePresenter
ターゲットを追加します。Style
XamDatagrid.Resources
- これにより、指定されたセル値プレゼンターがフォーカスされているかどうかがチェックされ、新しい行の追加が表されます。
その場合、添付された動作を介して親フィールドを編集可能にします。
<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);
}
}
お役に立てれば。