DataGridTemplateColumn中的WPF数据绑定ComboBox

Ste*_*bbi 2 data-binding wpf binding

我有一个DataGrid,我想填充一个包含ComboBox的列,该列包含基于行的动态ItemsSource元素.我正确地显示了组合框,并在列表中填充了正确的元素列表,从AvailableLogFileProcessTypes属性拉入,这是一个ReadOnlyCollection.但是,当用户在组合框中进行选择时,LogFileProcessType属性不会设置为选择.

数据:

Property LogFileDirectories, IEnumerable<LogFileData>,
LogFileData:
public LogFileProcessType LogFileProcessType{get;set;}
public ReadOnlyCollection<LogFileProcessType> AvailableLogFileProcessTypes { get; set; }
Run Code Online (Sandbox Code Playgroud)

该属性当前有一个支持字段,并且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>
Run Code Online (Sandbox Code Playgroud)

Ste*_*bbi 6

参见大马士革对思维过程的反应.

需要在CellTemplate/CelLEditTemplate上指定UpdateSourceTrigger.这会触发属性更改.

 <DataGridTemplateColumn Header="template">
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate>
            <ComboBox SelectedValue="{Binding Path=LogFileProcessType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                      ItemsSource="{Binding Path=AvailableLogFileProcessTypes}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellEditingTemplate>      
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox SelectedValue="{Binding Path=LogFileProcessType, UpdateSourceTrigger=PropertyChanged}"
                      ItemsSource="{Binding Path=AvailableLogFileProcessTypes}"/>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>                            
</DataGridTemplateColumn>  
Run Code Online (Sandbox Code Playgroud)