【问题标题】:Binding ContextMenu defined in a DataTemplate to command将 DataTemplate 中定义的 ContextMenu 绑定到命令
【发布时间】:2013-11-04 18:17:41
【问题描述】:

好的,这是我的问题:我有一个像这样在 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 以便绑定命令?

【问题讨论】:

    标签: contextmenu datatemplate


    【解决方案1】:

    解决了,我所要做的就是在绑定到我的视图模型的数据上下文的边框上添加一个标签,然后使用 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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-11
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      • 2017-01-31
      相关资源
      最近更新 更多