2011-10-07 63 views
0

考虑,Ingragistic XamGrid:新记录是不可编辑

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

在运行,我可以看到在网格之上的空新行。但新行中的列没有可编辑的!当我将每个字段标记为可编辑时,这些列是可编辑的。

是否有可能使添加记录功能工作,而“没有”明确标记每个字段为可编辑?

感谢您的关注。

回答

2

您最好的选择是对的Infragistics NetAdvantage的论坛上问这个,不过话说回来......

据我所知,你想要的是一个只读数据网格(在其细胞不可编辑)有一个可编辑行添加新项...

  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); 
    } 
} 

希望这有助于。

+0

+1令人惊叹的清晰度和WPF命令。 –

+0

Thx并且如果它解决了您的问题,请接受它作为答案。 –

+0

是的,就像一个魅力! –