Как связать 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}">