2011-10-07 61 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

是的,就像一個魅力! –