Pergunta

Pergunta:A maioria dos exemplos de código no DataGridComboBox parecem usar um recurso estático como o ItemsSource.No meu caso, eu gostaria de fornecer diferentes ItemsSources com cada objeto vinculado. Isso pode ser feito?

Fundo:Eu estou tentando vincular uma coleção de Questão de classe de objetos para um DataGrid do WPF, usando um DataGridComboBoxColumn de controle.A seqüência de Resposta fornece SelectedValue.Eu gostaria de AnswerDomain lista para fornecer o ItemsSource para cada Combinação.O AnswerDomain difere pergunta a Pergunta.

Classe

public class Question
  {
    string Answer {get; set;}
    List<string> AnswerDomain {get; set;}
    //...other stuff
  }

XAML

<DataGrid ItemsSource="{Binding Path=InspectionItems}" AutoGenerateColumns="False" Name="dataGrid1" >
    <DataGrid.Columns>
        <DataGridComboBoxColumn Header="Answer Domain"
                                DisplayMemberPath="Answer"
                                SelectedValuePath="Answer"
                                ItemsSource="{Binding Path=AnswerDomain}" 
                                    >
        </DataGridComboBoxColumn>
    </DataGrid.Columns>
</DataGrid>

Problema:Há um par de problemas.O principal problema agora é que as caixas de combinação em cada Linha de DataGrid não apresentar o AnswerDomain cadeias de caracteres.Eu tentei uma série de XAML combinações sem sucesso.Ajuda-me a Estouro de Pilha.

ATUALIZAÇÃO: A solução selecionada abaixo trabalhou.Depois de algumas confusões e adicionando UpdateSourceTrigger=PropertyChanged para o SelectedItem, as alterações do usuário na caixa de combinação, em seguida, foram refletidas de volta na base de objeto personalizado.

<DataGridTemplateColumn Header="Answer">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox 
                ItemsSource="{Binding AnswerDomain}" 
                SelectedItem="{Binding Answer, UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Foi útil?

Solução

O problema é que a exibição membro caminho não é Resposta, porque não há "Resposta", de propriedade de uma seqüência de caracteres.Eu nunca uso o DataGridComboBoxColumn, não parece natural para mim, muito parecido com a velha ganhar formas maneira.Tente o abaixo.MAS certifique-se de que VOCÊ IMPLEMENTA INotifyPropertyChanged na sua Pergunta Classe, e o fogo os eventos apropriados.

<DataGridTemplateColumn>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox ItemsSource="{Binding AnswerDomain}" SelectedItem="{Binding Answer}" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn> 

Aqui está como a sua Pergunta classe deve procurar:

public class Question : INotifyPropertyChanged
{
    private string m_Answer;
    public string Answer
    {
        get { return m_Answer; }
        set
        {
            if (m_Answer != value)
            {
                m_Answer = value;
                FirePropertyChanged("Answer");
            }
        }
    }

    private List<string> m_AnswerDomain;
    public List<string> AnswerDomain
    {
        get { return m_AnswerDomain; }
        set
        {
            if (m_AnswerDomain != value)
            {
                m_AnswerDomain = value;
                FirePropertyChanged("AnswerDomain");
            }
        }
    }


    [field: NonSerialized]
    public event PropertyChangedEventHandler PropertyChanged;

    private void FirePropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }


}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top