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

Мне нужно отобразить в 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. Есть ли у вас какие-либо идеи?


person mariosangiorgio    schedule 17.07.2014    source источник


Ответы (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;
    }

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

person mariosangiorgio    schedule 17.07.2014