我有一个DataGrid,我想填充一个包含ComboBox的列,该列包含基于行的动态ItemsSource元素 . 我正确显示了组合框,并在列表中填充了正确的元素列表,从 AvailableLogFileProcessTypes
属性(即ReadOnlyCollection)中提取 . 但是,当用户在组合框中进行选择时, LogFileProcessType
属性未设置为选择 .
Data:
Property LogFileDirectories, IEnumerable<LogFileData>,
LogFileData:
public LogFileProcessType LogFileProcessType{get;set;}
public ReadOnlyCollection<LogFileProcessType> AvailableLogFileProcessTypes { get; set; }
该属性当前有一个支持字段,并且set属性中的断点不会被命中,所以我知道它已本地化为绑定设置 . 我的XAML有什么问题阻止设置属性?
如您所见,我已尝试在CellEditingTemplate和CellTemplate中设置SelectedValue和SelectedItem . 我不确定哪一个是合适的 .
<DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Path=LogFileDirectories, UpdateSourceTrigger=PropertyChanged}"
HeadersVisibility="Column" CanUserReorderColumns="False" CanUserAddRows="False" Margin="0,0,0,35" Grid.RowSpan="3">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Processed" Binding="{Binding Path=IsProcessingComplete, Mode=OneWay}" Width="70" IsReadOnly="True" />
<DataGridTemplateColumn Header="template">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox SelectedValue="{Binding Path=LogFileProcessType, Mode=TwoWay}"
SelectedItem="{Binding Path=LogFileProcessType, Mode=TwoWay}"
ItemsSource="{Binding Path=AvailableLogFileProcessTypes}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox SelectedValue="{Binding Path=LogFileProcessType, Mode=TwoWay}"
SelectedItem="{Binding Path=LogFileProcessType, Mode=TwoWay}"
ItemsSource="{Binding Path=AvailableLogFileProcessTypes}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
2 回答
参见大马士革对思维过程的反应 .
需要在CellTemplate / CelLEditTemplate上指定UpdateSourceTrigger . 这会触发属性更改 .
尝试将此添加到您的
ComboBox
:因此,如果
UpdateSourceTrigger
设置为PropertyChanged
,则每次更改对象AvailableLogFileProcessTypes
并调用OnPropertyChanged
时,将刷新ItemsSource
.