0

好的,这是我的问题:我在 Style.xaml 中定义了一个 UserControl 模板,如下所示

 <Style x:Key="ModulProfTemplate" TargetType="{x:Type UserControl}" >
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type UserControl}">
                <Border BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true" BorderThickness="{TemplateBinding BorderThickness}" DataContext="{Binding DataContext, RelativeSource={RelativeSource TemplatedParent}}">

                    <Border x:Name="border" BorderBrush="#004E6CA9" BorderThickness="1.5">
                        <Grid x:Name="Layout" Background="{Binding Background, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Margin="0.5" DataContext="{Binding}">                                
                            <Grid.ContextMenu>
                                <ContextMenu>
                                    <MenuItem Header="Disponibil" Command="{Binding GridContextMenuCommand}" CommandParameter="disp"/>
                                    <MenuItem Header="Indisponibil" Command="{Binding GridContextMenuCommand}" CommandParameter="indisp"/>
                                </ContextMenu>
                            </Grid.ContextMenu>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="0.497*"/>
                                <RowDefinition Height="0.5*"/>
                            </Grid.RowDefinitions>
                            <StackPanel Orientation="Horizontal" d:LayoutOverrides="Height" HorizontalAlignment="Center" VerticalAlignment="Center">
                                <TextBlock TextWrapping="Wrap" Text="{Binding SalaSaptPara, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                <TextBlock TextWrapping="Wrap" Text="{Binding MaterieSaptPara, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                            </StackPanel>
                            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
                                <TextBlock TextWrapping="Wrap" Text="{Binding SalaSaptImpara, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
                                <TextBlock TextWrapping="Wrap" Text="{Binding MaterieSaptImpara, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="2,0,0,0"/>
                            </StackPanel>
                        </Grid>
                    </Border>
                </Border>                    
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="BorderBrush" TargetName="border" Value="#CA4E6CA9"/>                            
                    </Trigger>
                </ControlTemplate.Triggers>                    
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

问题是我不知道如何将命令绑定到 menuitem。UserControl的DataContext设置为ViewModel.Luni.M1,命令在ViewModel DataContext中。所以我的问题是:如何更改 DataContext 以便绑定命令?

4

1 回答 1

0

解决了,我所要做的就是在绑定到我的视图模型的数据上下文的边框上添加一个标签,然后使用 PlacementTarget.Tag.MyCommand,如下所示:)

                        <Border x:Name="border" BorderBrush="#004E6CA9" BorderThickness="1.5" Tag="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=my:CadreDidacticeView, AncestorLevel=1}, Path=DataContext}">
                        <Border.ContextMenu>
                            <ContextMenu>
                                <MenuItem Header="Disponibil" Command="{Binding PlacementTarget.Tag.GridContextMenuCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ContextMenu}}}">
                                </MenuItem>
                            </ContextMenu>
                        </Border.ContextMenu>
于 2013-11-05T14:16:31.360 回答