Связывание ContextMenu в DataTemplate - PullRequest
1 голос
/ 17 ноября 2010

У меня есть:

 <ListBox>
            <ListBox.Resources>
                <DataTemplate DataType="{x:Type ViewModels:StyleViewModel}">
                    <DockPanel>                            
                        <Button Content="{Binding Name}" Tag="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}">
                            <Button.ContextMenu>
                                <ContextMenu>
                                    <MenuItem Header="Delete" Command="{Binding PlacementTarget.Tag.DataContext.RemoveMember1FavoriteStyleCommand}" CommandParameter="{Binding}" />
                                </ContextMenu>
                            </Button.ContextMenu>
                        </Button>                            
                    </DockPanel>
                </DataTemplate>
            </ListBox.Resources>
        </ListBox>

То, чего я пытаюсь добиться, - это связать команду в пункте меню контекстного меню с ICommand, которая определена в модели представления, которая является текстом данных списка.и параметр команды должен быть StyleViewModel, но то, что я пробовал, не сработало.Кто-нибудь может указать мне правильное направление?

Ответы [ 2 ]

5 голосов
/ 18 ноября 2010

Нашли!

<ListBox ItemsSource="{Binding ActiveCustomer.Member1FavoriteStyles}" ItemsPanel="{StaticResource ListBoxStyleItemsPanelAsVerticalStackPanel}" ItemContainerStyle="{StaticResource ListBoxItemContainerStyle}" Background="Transparent" BorderThickness="0">
            <ListBox.Resources>
                <DataTemplate DataType="{x:Type ViewModels:StyleViewModel}">
                    <DockPanel>                            
                        <Button Content="{Binding Name}" Tag="{Binding DataContext, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}">
                            <Button.ContextMenu>
                                <ContextMenu>
                                    <MenuItem Header="Remove" Command="{Binding PlacementTarget.Tag.RemoveMember1FavoriteStyleCommand, RelativeSource={RelativeSource AncestorType=ContextMenu}}" CommandParameter="{Binding}" />
                                </ContextMenu>
                            </Button.ContextMenu>
                        </Button>                            
                    </DockPanel>
                </DataTemplate>
            </ListBox.Resources>
        </ListBox>
1 голос
/ 18 ноября 2010

Почти работает сейчас, за исключением того, что теперь CommandParameter = "{Binding}" не возвращает StyleViewModel:

 <ListBox ItemsSource="{Binding ActiveCustomer.Member1FavoriteStyles}" ItemsPanel="{StaticResource ListBoxStyleItemsPanelAsVerticalStackPanel}" ItemContainerStyle="{StaticResource ListBoxItemContainerStyle}" Background="Transparent" BorderThickness="0">
            <ListBox.Resources>
                <DataTemplate DataType="{x:Type ViewModels:StyleViewModel}">
                    <DockPanel>
                        <Button Content="{Binding Name}" Tag="{Binding DataContext,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBox}}}">
                            <Button.ContextMenu>
                                <ContextMenu DataContext="{Binding RelativeSource={RelativeSource Mode=Self}, Path=PlacementTarget.Tag}">
                                    <MenuItem Header="{Binding ActiveCustomer.Member1FirstName}" Command="{Binding RemoveMember1FavoriteStyleCommand}" CommandParameter="{Binding}" />
                                </ContextMenu>
                            </Button.ContextMenu>
                        </Button>                            
                    </DockPanel>
                </DataTemplate>
            </ListBox.Resources>
        </ListBox>

Мне интересно, можно ли это сделать ...

...