ComboBox привязки данных WPF в DataGridTemplateColumn - PullRequest
2 голосов
/ 01 июня 2011

У меня есть DataGrid, и я хочу заполнить столбец, содержащий ComboBox, динамическим ItemsSource элементов на основе строки.У меня правильно отображается поле со списком, и правильный список элементов заполняется в списке, как извлечено из свойства AvailableLogFileProcessTypes, которое является ReadOnlyCollection.Однако, когда выбор выполняется пользователем в выпадающем списке, свойство LogFileProcessType не устанавливается на выбор.

Данные:

Property LogFileDirectories, IEnumerable<LogFileData>,
LogFileData:
public LogFileProcessType LogFileProcessType{get;set;}
public ReadOnlyCollection<LogFileProcessType> AvailableLogFileProcessTypes { get; set; }

У свойства в настоящее время есть поле поддержки, и точка останова в свойстве set не получает удар, поэтому я знаю, что он локализован внастройка привязки.Что не так с моим XAML, который препятствует установке свойства?

Как вы можете видеть, я попытался установить SelectedValue и SelectedItem в CellEditingTemplate и CellTemplate.Я не уверен, какой из них подходит.

 <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 ]

6 голосов
/ 01 июня 2011

См. Ответ Дамаска на мыслительный процесс.

Необходимо указать UpdateSourceTrigger на CellTemplate / CelLEditTemplate. Это вызывает изменение свойства.

 <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>  
4 голосов
/ 01 июня 2011

Попытайтесь добавить это к вашему 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 будет обновлено.

...