Frage

I 3 Tabellen: Gegenstand - die das Datacontext ist - es hat eine Navigationsspalte Gruppe Group -. Hat eine Navigationsspalte Kategorie

Ich möchte Spalten im Datagrid beide (Kategorie & Group) haben, und wenn ich eine Kategorie wählen, sollte es in der Gruppe col nur die Category.Groups angezeigt werden soll.

Hier ist der Code, an dem ich arbeite:

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

auf Aktualisieren
Würden Sie sagen, das Problem ist, dass die Itemssource-Eigenschaft kann nicht auf eine nicht-statische eingestellt werden Bindung? Ich vermute, weil auch ich die Itemssource auf {Binding} mit dem DummyConverter setzte es nicht in dem Konverter zu stoppen; und in der Kategorie ComboBox es funktioniert gut.

War es hilfreich?

Lösung

Die Spalten im Datagrid haben keine Datacontext, da sie nie in der visuellen Struktur hinzugefügt. klingt ein bisschen komisch, aber einen Blick auf Vinces Blog , seine bekam ein gutes Beispiel für die visuelle Gestaltung. sobald das Gitter der Zellen einen Datenkontext gezogen wird und Sie die Combo-Boxen Artikel Quelle in sie mit normalen Bindungen einstellen (nicht statische Ressourcen ..)

Sie können die Elemente Kombinationsfeld zugreifen Quelle als solche:

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

Hier finden Sie aktuelle hier und auch hier für einige Code. Sie werden auch für die nicht edting Element , wie in dieser Post setzen die Elemente Quelle benötigen >

Andere Tipps

Ich war mit MVVM und ich wollte den ItemSource der Säule zu einer Sammlung von Objekten im Fenster Datenkontext binden. Ich muss 10 verschiedene Möglichkeiten ausprobiert haben und nichts funktionierte , bis ich diese Antwort .

Der Trick besteht darin, einen CollectionViewSource außerhalb des Gitters zu definieren und dann innerhalb des Grid Reference StaticResource verwenden. Zum Beispiel:

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top