Problem binding DataGridComboBoxColumn.ItemsSource

后端 未结 2 1246
遇见更好的自我
遇见更好的自我 2020-12-01 15:15

I have 3 tables: Item - which is the DataContext - it has a navigation column Group Group - has a navigation column Category.

I want to have in the DataGrid both (Ca

相关标签:
2条回答
  • 2020-12-01 15:32

    The columns in the datagrid don't have a datacontext, as they are never added to the visual tree. sound a bit weird but have a look at vince's blog, its got a good example of the visual layout. once the grid is drawn the cells have a data context and you can set the combo boxes items source in them using normal bindings (not static resources..)

    You can access the combo box items source as such:

    <dg:DataGridComboBoxColumn>
       <dg:DataGridComboBoxColumn.EditingElementStyle>
          <Style TargetType="ComboBox">
             <Setter Property="ItemsSource" Value="{Binding Path=MyBindingPath}" />
          </Style>
       </dg:DataGridComboBoxColumn.EditingElementStyle>
    </dg:DataGridComboBoxColumn>
    

    Have a look here and also here for some code. You will also need to set the items source for the non edting element as in this post

    0 讨论(0)
  • 2020-12-01 15:46

    I was using MVVM and I wanted to bind the ItemSource of the column to a collection of objects in the window data context. I must have tried 10 different ways and nothing worked until I found this answer.

    The trick is to define a CollectionViewSource outside the grid and then reference it inside the grid using StaticResource. For example,

    <Window.Resources>
        <CollectionViewSource x:Key="ItemsCVS" Source="{Binding MyItems}" />
    </Window.Resources>
    <!-- ... -->
    <DataGrid ItemsSource="{Binding MyRecords}">
        <DataGridComboBoxColumn Header="Column With Predefined Values"
                                ItemsSource="{Binding Source={StaticResource ItemsCVS}}"
                                SelectedValueBinding="{Binding MyItemId}"
                                SelectedValuePath="Id"
                                DisplayMemberPath="StatusCode" />
    </DataGrid>
    
    0 讨论(0)
提交回复
热议问题