DataContext - dla datatemplate

0

Witam, mam grida, który wyświetla mi dane z listy:

<DataGrid ItemsSource="{Binding Products}"

W jednej z kolumn chce mieć przycisk, który eksportuje mi konkretny produkt do pliku. Używam Commandingu.

<DataGridTemplateColumn Header="Export">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button Content="Export" Command="{Binding ExportCommand}" CommandParameter="{Binding ID}" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

I już to mi nie działa. Pewnie już moj pomysł jest zły. Mam w ViewModelu properte ExportCommand, której mi nie znajduje - pewnie dlatego, że szuka w liście Products... chyba nie do końca to rozumiem.

0

Bardzo dobrze to rozumiesz.
Musisz wskazać mu konkretnie gdzie ma szukać tego ExportCommand, bo w Twoim kodzie szuka go w ItemsSource.

Ja rozwiązałem to w taki sposób (zamiast DataGrid - ItemsControl, ale to nie ma znaczenia):

<ItemsControl Name="GameBoard" ItemsSource="{Binding Items}">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <UniformGrid Rows="{Binding CountRows}" Columns="{Binding CountColumns}" />
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Button Content="{Binding Name}"                                    
                                    Command="{Binding DataContext.MouseEnterCommand ,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" 
                                    CommandParameter="{Binding}"/>                         
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
</ItemsControl>

Kilka słów wyjaśnienia: mam ItemsControl,do której przez ItemsSource binduję jakaś kolekcję Items . Każdy przycisk ma zawartość odpowiadającą Name obiektu z kolekcji Items. Natomiast MouseEnterCommand mam w ViewModelu. Żeby się do niej "dostać" muszę pokazać źródło DataContext - w moim przypadku wykorzystałem okno.

1 użytkowników online, w tym zalogowanych: 0, gości: 1