Как связать Itemsource со списком в xceed datagrid

Я пытаюсь добавить комбинированный список в сетку данных Xceed WPF, но не могу связать Itemsource с полем со списком. Вот xaml для сетки данных.

<xwpf:DataGridControl ItemsSource="{Binding SaleDetails}" AutoCreateColumns="False"  >
        <xwpf:DataGridControl.Columns>
            <xwpf:Column FieldName="Status" Title="Status" CellContentTemplate="{StaticResource colReinstatementType}" CellEditor="{StaticResource statusEditor}" />
        </xwpf:DataGridControl.Columns>
</xwpf:DataGridControl>

Ресурсы

    <UserControl.Resources>
    <DataTemplate x:Key="colReinstatementType">
            <ComboBox BorderThickness="0"
                      x:Name="cmbStatus1"
                      IsReadOnly="False"
                      IsEditable="True"
                      MinHeight="20"
                      DisplayMemberPath="part_no"
                      Text="{xwpf:CellEditorBinding NotifyOnSourceUpdated=True}"  
                      SelectedItem="{Binding Item, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                      ItemsSource="{Binding AvailablePartMaterial, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
            </ComboBox>
        </DataTemplate>
        <xwpf:CellEditor x:Key="statusEditor">
            <xwpf:CellEditor.EditTemplate>
                <DataTemplate>
                    <ComboBox BorderThickness="0"
                              x:Name="cmbStatus"
                              IsReadOnly="False"
                              IsEditable="True"
                              MinHeight="20"
                              DisplayMemberPath="part_no"
                              Text="{xwpf:CellEditorBinding NotifyOnSourceUpdated=True}"  
                              SelectedItem="{Binding Item, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                              ItemsSource="{Binding AvailablePartMaterial, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
                    </ComboBox>
                </DataTemplate>
            </xwpf:CellEditor.EditTemplate>
        </xwpf:CellEditor>            
     </UserControl.Resources>

Item а также AvailablePartMaterial существуют в SaleSheet тип, чья коллекция связана с сеткой данных. Четное Item свойство действительно срабатывает, что означает, что выбранный элемент поля со списком связывается. Но данные не отображаются в поле со списком.

1 ответ

Решение

CellContentTemplate предназначен только для отображения. Обычно он используется для отображения текста, используя что-то вроде TextBlock. В тех случаях, когда необходимо использовать тип редактора (например, CheckBox для логического столбца), вы захотите сделать его ReadOnly, чтобы избежать нежелательных проблем.

В вашем случае у вас есть ComboBox с CellEditorBinding в качестве CellContentTemplate. CellEditorBinding работает только в CellEditor, поэтому, если пользователь редактирует значение строки с помощью ComboBox CellContentTemplate, это не повлияет на базовое значение.

Вместо этого попробуйте что-то вроде этого:

SelectedValuePath="part_no"   // name of column used to identify which record is selected
DisplayMemberPath="part_name" // name of column used to indicate the text/value to display
SelectedValue = {xwpf:CellEditorBinding} // SelectedItem or SelectedIndex can be used instead, depending on the situation/data

Что касается ItemSource, вы не можете привязываться к нему напрямую, пока находитесь внутри DataTemplate CellEditor, вам нужно указать, где он находится. Например:

ItemsSource="{Binding Source={x:Static Application.Current}, Path=MyData}">
Другие вопросы по тегам