Domanda

Ho 3 tabelle:Voce - che è il DataContext - ha una colonna di navigazione del Gruppo Gruppo - ha una colonna di navigazione per Categoria.

Vorrei avere nella DataGrid sia (Categoria e Gruppo) colonne e quando scelgo una categoria dovrebbe visualizzare nel gruppo col solo la Categoria di appartenenza.Gruppi.

Qui è il codice che sto lavorando su:

<tk:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding}">
    <tk:DataGrid.Columns>

        <!--Works-->
        <tk:DataGridComboBoxColumn                                        
            Header="Categroy" 
            DisplayMemberPath="Title"                    
            SelectedValuePath="CategoryId"
            SelectedValueBinding="{Binding Group.Category.CategoryId}"
            ItemsSource="{Binding Context.Categories, 
                Source={x:Static Application.Current}}"
        />


        <!--Look at these two things:-->

        <!--This does work-->
        <tk:DataGridTemplateColumn>
            <tk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ItemsControl
                        ItemsSource="{Binding Group.Category.Groups}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate DataType="{x:Type data:Group}">
                                <TextBlock Text="{Binding Title}"/>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </DataTemplate>
            </tk:DataGridTemplateColumn.CellTemplate>
        </tk:DataGridTemplateColumn>

        <!--But this does NOT work, even it's the same source-->
        <!--Notice I even tried a dummy converter and doesnt reach there-->
        <tk:DataGridComboBoxColumn 
            Header="Group" 
            DisplayMemberPath="Title"
            SelectedValuePath="GroupId"
            ItemsSource="{Binding Group.Category.Groups,
                Converter={StaticResource DummyConverter}}"
            SelectedValueBinding="{Binding Group.GroupId}"
            />

    </tk:DataGrid.Columns>
</tk:DataGrid>

Aggiornamento
Vorresti dire che il problema è che la proprietà ItemsSource non può essere impostata a un non-statica?Ho il sospetto perché anche ho impostato il ItemsSource {Binding} con il DummyConverter non si ferma nel convertitore;e nella Categoria ComboBox funziona benissimo.

È stato utile?

Soluzione

Le colonne del datagrid non hanno un datacontext, come mai sono aggiunti alla struttura ad albero visuale.suono un po ' strano, ma avere uno sguardo a vince il blog, il suo è un buon esempio di layout visivo.una volta che la griglia è attirato le cellule di avere un contesto di dati ed è possibile impostare le caselle combinate elementi di origine, nel loro normale uso di associazioni (non statico risorse..)

È possibile accedere alla casella combinata di elementi di origine in quanto tale:

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

Hanno un look qui e anche qui per un po ' di codice.Avrete anche bisogno di set di elementi di origine per non edting elemento come in questo post

Altri suggerimenti

Stavo usando MVVM e ho voluto associare la ItemSource della colonna di una collezione di oggetti nella finestra dei dati di contesto.Ho già provato 10 modi diversi, e niente ha funzionato fino a quando ho trovato questa risposta.

Il trucco è quello di definire un CollectionViewSource al di fuori della griglia e quindi fare riferimento all'interno della griglia utilizzando StaticResource.Per esempio,

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top