Tenho um objeto DataSet que tem uma propriedade name e uma propriedade ID. Tenho uma lista de datasets no meu viewmodel, que deve ser o itemsource de uma coluna DataGrid Combobox. Defini a vinculação da seguinte forma:
dataGridControl:DataGridComboBoxColumn
Binding="{Binding DataSetIndex}"
Header="DataSet"
ItemsSource="{x:Bind Model.DataSets}"
DisplayMemberPath="Name"
Tag="DataSet" />
Agora, isso funciona, exceto pelo fato de que, de alguma forma, preciso informar à vinculação que ela deve usar a propriedade DataSet.ID. Então, quando um usuário seleciona um valor na combobox, o DataSetIndex de vinculação deve ser definido como um int, que é a propriedade DataSet.ID. Como posso fazer isso na vinculação? Agora, é claro, recebo um erro dizendo que o itemsource não tem uma propriedade int, porque ele tenta usar o objeto DataSet como um todo. Agora, não há SelectedValuePath no kit de ferramentas da comunidade? Tenho que usar um templatecolumn?
Aqui está minha pergunta atualizada com base na sua solução. Ela também tem a vinculação codebehind.
<dataGridControl:DataGridTemplateColumn Header="DataSet">
<dataGridControl:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate x:DataType="local:DataExtractionSetupViewModel">
<ComboBox x:Name="dataSetsComboBox" Loaded="ComboBox_Loaded"
DisplayMemberPath="Name"
SelectedValue="{Binding DataSetIndex, Mode=TwoWay}" SelectedValuePath="ID" IsDropDownOpen="True"/>
</DataTemplate>
</dataGridControl:DataGridTemplateColumn.CellEditingTemplate>
<dataGridControl:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding DatasetIndex}"/>
</DataTemplate>
</dataGridControl:DataGridTemplateColumn.CellTemplate>
</dataGridControl:DataGridTemplateColumn>
Agora, minha única pergunta é: como podemos fazer com que essa coluna de modelo personalizado pareça exatamente como uma coluna de combobox de grade de dados normal e também mostrar o nome do conjunto de dados na caixa de texto em vez do índice?
O seguinte usa code-behind, mas funciona:
Se você quiser mudar a
ComboBox
aparência, tente definir:CornerRadius
para 0BorderThickness
para 0Background
paraTransparent