【问题标题】:Binding-Error with ComboBoxItem in DataGridDataGrid 中的 ComboBoxItem 绑定错误
【发布时间】:2015-03-05 14:59:37
【问题描述】:

我有一个UserControl,里面有一个DataGrid。我将DataGrid 的列创建为DataGridTemplateColumns。 DataGrid 看起来像:

<DataGrid Grid.Row="1" Style="{StaticResource DataGridStyle}" Margin="5"
      ItemsSource="{Binding Storage.Items, UpdateSourceTrigger=PropertyChanged}"
      SelectedItem="{Binding SelectedItem, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
      MaxHeight="400" VerticalAlignment="Top">
      <DataGrid.Columns>
        <DataGridTemplateColumn Header="Comment" Width="*" SortMemberPath="Comment">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Comment}" Margin="3,2" VerticalAlignment="Center"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

        // several more column-definitions                      

        <DataGridTemplateColumn Header="Actions" Width="90">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button Margin="5" Content="Action..." Cursor="Hand" >
                        <Button.Template>
                            <ControlTemplate TargetType="{x:Type Button}">
                                <TextBlock TextDecorations="Underline" HorizontalAlignment="Center" Foreground="Blue">
                                    <ContentPresenter/>
                                </TextBlock>
                            </ControlTemplate>
                        </Button.Template>
                        <Button.Style>
                            <Style TargetType="{x:Type Button}">
                                <Style.Triggers>
                                    <EventTrigger RoutedEvent="Click">
                                        <EventTrigger.Actions>
                                            <BeginStoryboard>
                                                <Storyboard>
                                                    <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsOpen">
                                                        <DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
                                                    </BooleanAnimationUsingKeyFrames>
                                                </Storyboard>
                                            </BeginStoryboard>
                                        </EventTrigger.Actions>
                                    </EventTrigger>
                                </Style.Triggers>
                                <Setter Property="ContextMenu">
                                    <Setter.Value>
                                        <ContextMenu>                                                            
                                            <MenuItem Header="Edit"/>
                                            <MenuItem Header="Delete" Command="{Binding DataContext.CommonCommand, 
                                                RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}" 
                                                      CommandParameter="{x:Static defs:CommonCommandTarget.Delete}"/>
                                            <Separator/>
                                        </ContextMenu>
                                    </Setter.Value>
                                </Setter>
                            </Style>
                        </Button.Style>
                    </Button>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>+
    </DataGrid.Columns>
</DataGrid>

我的问题是最后一列中 ContextMenu 的 Delete-Command 绑定。显示上下文菜单,但单击时没有任何反应。

在输出中我可以看到一个绑定错误:

System.Windows.Data 错误:4:找不到绑定源 参考'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.DataGrid',AncestorLevel='1''。 BindingExpression:Path=DataContext.CommonCommand;数据项=空; 目标元素是'MenuItem'(名称='');目标属性是“命令” (输入“ICommand”)

直接在模板列中的DataGridButton 之外可以很好地使用绑定。所以命令是正确的。

AncestorRelativeSource 或我必须提供什么才能调用 ViewModel 中的命令?

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    您只能在可视化树的范围内使用 RelativeSource 标记扩展。 DataGridTemplateColumn 不是可视树的一部分。查看this answer

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-25
      • 2013-02-10
      • 2011-09-18
      • 2011-07-19
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      相关资源
      最近更新 更多