Привязка данных в шаблоне ячейки Devexpress: GridControl не работает

Я пытаюсь привязать свойство List SubscribedSymbols в объекте класса StrategySubscription как часть List к выпадающим спискам в каждой ячейке определенного столбца в Devexpress GridControl, но не могу заставить работать привязку данных.

Автоматический генератор столбцов работает и помещает значения в сетку. Итак, я уверен, что данные существуют.

Я приложил код xaml и объект данных, а также скриншот текущего вывода.

Не могли бы вы помочь заставить привязку данных работать правильно? Я хочу, чтобы коллекция строк в SubscribedSymbols была заполнена в комбинированных списках каждой ячейки в шаблонном столбце.

P.S .: Первые 3 столбца сетки и связанные ячейки связываются отлично, единственная проблема заключается в привязке данных к комбинированному списку в каждой ячейке последнего столбца.

public class StrategySubscription
    {
        public Guid StrategyId { get; set; }
        public string StrategyName { get; set; }
        public int CapitalAllocation { get; set; }
        public List<string> SubscribedSymbols { get; set; }

        public StrategySubscription(string strategyName, Guid strategyId, int capitalAllocation, List<SymbolSubscription> symbolSubscriptions)
        {
            StrategyName = strategyName;
            StrategyId = strategyId;
            CapitalAllocation = capitalAllocation;
            SubscribedSymbols = symbolSubscriptions.Select(x => x.Symbol.SymbolId).ToList();
            //SubscribedSymbols = String.Join(", ", symbolSubscriptions.Select(x => x.Symbol.SymbolId).OrderBy(x=>x));
        }
    }




<dxg:GridControl x:Name="StrategyGrid"  ItemsSource="{Binding StrategySubscriptions}" AutoGenerateColumns="None">
                    <dxg:GridControl.Columns>
                        <dxg:GridColumn Header="Strategy Id" Binding="{Binding StrategyId}"/>
                        <dxg:GridColumn Header="Strategy Name" Binding="{Binding StrategyName}"/>
                        <dxg:GridColumn Header="Strategy Capitalization" Binding="{Binding CapitalAllocation}"/>
                        <dxg:GridColumn Header="Symbol Subscription">
                            <dxg:GridColumn.CellTemplate>
                                <DataTemplate>
                                    <ComboBox ItemsSource="{Binding SubscribedSymbols}"/>
                                </DataTemplate>
                            </dxg:GridColumn.CellTemplate>
                        </dxg:GridColumn>
                    </dxg:GridControl.Columns>

                    <dxg:GridControl.View>
                        <dxg:TableView AllowEditing="False" AutoWidth="True" BestFitArea="All" AllowBestFit="True" ShowGroupPanel="True" ShowSearchPanelMode="Always" NavigationStyle="Row"/>
                    </dxg:GridControl.View>
                </dxg:GridControl>

person Matt    schedule 28.02.2015    source источник


Ответы (1)


Добавьте Data в свою привязку:

...
<dxg:GridColumn Header="Symbol Subscription">
    <dxg:GridColumn.CellTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding Data.SubscribedSymbols}"/>
        </DataTemplate>
    </dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
...

Если вы используете элементы управления DE, лучшим вариантом будет использование dxe:ComboBoxEdit вместо ComboBox.

...
<dxg:GridColumn Header="Symbol Subscription">
    <dxg:GridColumn.CellTemplate>
        <DataTemplate>
            <dxe:ComboBoxEdit  
                ItemsSource="{Binding Data.SubscribedSymbols}"/>
        </DataTemplate>
    </dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
...
person kmatyaszek    schedule 28.02.2015
comment
Это работает, чистая магия :-) Но в чем идея? Почему Data. * Решает проблему привязки? Не могли бы вы помочь мне понять? Большое спасибо - person Matt; 28.02.2015
comment
Свойство @MattWolf Data решило проблему привязки, потому что в этом случае DataContext из ComboBox равно EditGridCellData, где свойство Data содержит данные текущей строки - person kmatyaszek; 28.02.2015
comment
Большое спасибо. Я думаю, что у меня возникли проблемы с пониманием того, что DataContext применяется к источнику элементов поля со списком. - person Matt; 01.03.2015