Найти редактор внутри инфраструктуры активной ячейки (XamDataGrid)

Как найти презентатор значения ячейки на основе ActiveRecord или ActiveCell в инфраструктуре xamdatagrid?

Я пробовал код ниже, но он дает null в презентаторе значения ячейки.

    private void grdGrid_RecordActivated(object sender,RecordActivatedEventArgs e)
    {          

  (grdGrid.ActiveRecord as DataRecord).Cells["fldDescription"].IsActive = true;

            Cell selectedCell = grdGrid.ActiveCell;

            CellValuePresenter cvp = CellValuePresenter.FromCell(selectedCell);

            cvp.Editor.StartEditMode();

}

это обязывает

<igDP:UnboundField  Name="fldDescription" Label="Description" BindingPath="TaskItemAction.Description" BindingMode="TwoWay">
                                                            <igDP:Field.Settings>
                                                                <igDP:FieldSettings CellClickAction="EnterEditModeIfAllowed" EditorStyle="{StaticResource textStyleKey}" EditorType="{x:Type editors:XamTextEditor}" EditAsType="{x:Type sys:String}" 
                                                        CellWidth="30" CellHeight="30" AllowEdit="True" Width="0.4*" Height="30" >

                                                                </igDP:FieldSettings>
                                                            </igDP:Field.Settings>

So now i want to find Activated record by that event and find editor type and start edit mode.

    private void GrdTaskItemAction_RecordActivated(object sender, RecordActivatedEventArgs e)
            {
    grdGrid.ExecuteCommand(DataPresenterCommands.StartEditMode);
} 

у меня работает нормально, но он вызывает режим редактирования для ячейки, а не для редактора (управление внутри него).

Я хочу найти этот редактор внутри активированной ячейки и сделать его доступным для редактирования.


person Saurabhchauhan232    schedule 22.04.2015    source источник


Ответы (3)


Вы можете напрямую получить ячейку, используя activerecord.

 private void grdGrid_RecordActivated(object sender, Infragistics.Windows.DataPresenter.Events.RecordActivatedEventArgs e)
    {
        Cell selectedCell = (grdGrid.ActiveRecord as DataRecord).Cells["fldDescription"];

        CellValuePresenter cvp = CellValuePresenter.FromCell(selectedCell);

        cvp.Editor.StartEditMode();
    }
person Ayyappan Subramanian    schedule 22.04.2015
comment
Извините, я изменил свой вопрос, потому что внезапно я заметил, что не использовал cellvaluepresenter, который я использовал выше, упомянув настройку привязки данных\ - person Saurabhchauhan232; 23.04.2015

Вы можете попробовать получить его из RecordActivatedEventArgs, используя метод GetChildCellValuePresenters().

var cellValuePresenters = ((DataRecordPresenter)e.Record).GetChildCellValuePresenters()

Затем вам нужно отфильтровать массив для нужного вам cellValuePresenter.

Редактировать: обновил код, чтобы он соответствовал CellValuePresenters, но забыл привести его к DataRecordPresenter. Но так как вы сказали, что ваша проблема отличается, я посмотрю на нее снова.

person Mike Nowak    schedule 22.04.2015
comment
как вы получаете этот метод, когда я пытался написать e.Record.GetChildCellValuePresenters(), он недоступен в событии RecordActivatedEventArgs - person Saurabhchauhan232; 23.04.2015

Используйте приведенный ниже код:(если у вас уже есть CellValuePresenter)

      CellValuePresenter cvp = new CellValuePresenter();

        ValueEditor VE = Infragistics.Windows.Utilities.GetDescendantFromType(cvp, typeof(ValueEditor), true) as ValueEditor;
        if (VE != null)
        {
            VE.IsInEditMode = true;
        }

Каждый Editor в Infragistics Lib является производным от ValueEditor, поэтому используйте его как ссылку на Editor.

person Kylo Ren    schedule 18.04.2016