Невозможно установить ItemsSource для XamComboEditor в XamDataGrid

1

Мне нужно отображать в XamDataGrid данные, поступающие из класса, который содержит несколько свойств и список допустимых вариантов из одного из них. Что-то вроде:

public class DataViewModel
{
    public string Identifier {get;private set;}
    public string Value {get;set;}
    public IEnumeranble<string> ValidValues {get; set;}
}

Я пытаюсь установить настройку XamDataGrid чтобы у меня был не редактируемый столбец Identifier столбец Value редактируемый с помощью XamComboEditor. Это xaml, к которому я подошел:

    <igDP:XamDataGrid GroupByAreaLocation="None">
        <igDP:XamDataGrid.FieldLayoutSettings>
            <igDP:FieldLayoutSettings AutoGenerateFields="False"/>
        </igDP:XamDataGrid.FieldLayoutSettings>
        <igDP:XamDataGrid.FieldLayouts>
            <igDP:FieldLayout>
                <igDP:FieldLayout.Fields>
                    <igDP:Field Name="Identifier"/>
                    <igDP:Field Name="Value">
                        <igDP:Field.Settings>
                            <igDP:FieldSettings EditorType="{x:Type igEditors:XamComboEditor}">
                                <igDP:FieldSettings.EditorStyle>
                                    <Style TargetType="{x:Type igEditors:XamComboEditor}">
                                        <Setter Property="IsEditable" Value="False" />
                                        <Setter Property="ItemsSource" Value="{Binding Path=DataContext.DataItem.Values, 
                    RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type igEditors:XamComboEditor}}}" />
                                    </Style>
                                </igDP:FieldSettings.EditorStyle>
                            </igDP:FieldSettings>
                        </igDP:Field.Settings>
                    </igDP:Field>
                </igDP:FieldLayout.Fields>
            </igDP:FieldLayout>
        </igDP:XamDataGrid.FieldLayouts>
    </igDP:XamDataGrid>

Связывание данных в XamDataGrid отлично работает, но одно на XamComboEditor.ItemsSource не работает, но я не уверен, как я могу исправить id. Есть ли у вас какие-либо идеи?

Теги:
infragistics
xamdatagrid

1 ответ

1
Лучший ответ

Я нашел альтернативный способ сделать это с помощью событий.

В XAML мне нужно было указать эти настройки вместо того, что у меня было:

                            <igDP:FieldSettings EditorType="{x:Type igEditors:XamComboEditor}">
                                <igDP:FieldSettings.EditorStyle>
                                    <Style TargetType="{x:Type igEditors:XamComboEditor}">
                                        <Style.Setters>
                                            <EventSetter Event="Loaded" Handler="XCEloaded"/>
                                            <Setter Property="IsEditable" Value="False" />
                                        </Style.Setters>
                                    </Style>
                                </igDP:FieldSettings.EditorStyle>
                            </igDP:FieldSettings>

И я обработал событие с помощью этого фрагмента кода:

    private void XCEloaded(object sender, RoutedEventArgs e)
    {
        var drp = Utilities.GetAncestorFromType(sender as DependencyObject, typeof(DataRecordPresenter), true) as DataRecordPresenter;
        if (drp.DataRecord.DataItem != null)
            (sender as XamComboEditor).ItemsSource = (drp.DataRecord.DataItem as DataViewModel).ValidValues;
    }

Это не похоже на самое чистое решение, но по крайней мере оно работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню