首页 文章

DataGridTemplateColumn中的WPF数据绑定ComboBox

提问于
浏览
2

我有一个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 回答

  • 4

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

    需要在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>
    
  • 6

    尝试将此添加到您的 ComboBox

    <ComboBox SelectedValue="{Binding Path=LogFileProcessType, Mode=TwoWay}"
                              SelectedItem="{Binding Path=LogFileProcessType, Mode=TwoWay}"
                              ItemsSource="{Binding Path=AvailableLogFileProcessTypes, UpdateSourceTrigger=PropertyChanged}"/>
    

    因此,如果 UpdateSourceTrigger 设置为 PropertyChanged ,则每次更改对象 AvailableLogFileProcessTypes 并调用 OnPropertyChanged 时,将刷新 ItemsSource .

相关问题