WPF绑定:在网格中向未绑定字段添加按钮

时间:2014-01-10 11:13:20

标签: wpf binding xamdatagrid

我正在尝试向XamDataPresenter中的未绑定字段添加按钮。

这是按钮模板:

        <Style x:Key="CancelButtonTemplate" TargetType="{x:Type igDP:CellValuePresenter}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}">
                        <Button x:Name="CancelButton" Content="Cancel" Command="{Binding CancelButtonCommand}" Width="80" Height="20" />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

这是XamDataPresenter中的未绑定字段:

                    <igDP:UnboundField Name="CancelOrder" Label="Cancel Order" Column="11">
                        <igDP:UnboundField.Settings>
                            <igDP:FieldSettings CellValuePresenterStyle="{StaticResource CancelButtonTemplate}" CellHeight="12" CellWidth="50">
                            </igDP:FieldSettings>
                        </igDP:UnboundField.Settings>
                    </igDP:UnboundField>                       
                </igDP:FieldLayout.Fields>   

按钮绑定的“CancelButtonCommand”是viewmodel中的公共属性,我已经验证它可以使用XamDataPresenter外部的按钮而不使用模板。

按钮显示在网格中,但按下时没有任何反应。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我相信你需要在风格中添加一点你的装订。尝试改为:

<Button Command="{Binding DataContext.CancelButtonCommand, RelativeSource={RelativeSource AncestorType={x:Type igDP:XamDataGrid}}}"
                                CommandParameter="{Binding}">

您使用的是XamDataPresenter还是XamDataGrid?如果是presenter,请将上面的x:Type更改为XamDataPresenter而不是XamDataGrid

另外:如果我记得,我必须添加CommandParameter,以便命令知道要操作哪一行,我需要在该方法中使用SelectedItem。否则,每个按钮的行为都完全相同。就我而言,每个按钮都应该对它所在行的对象做一些事情。

答案 1 :(得分:1)

使用如下按钮(元素绑定):

 <Button x:Name="CancelButton" Content="Cancel" Command="{Binding  ElementName=theotherbuttonworkingthiscommand,Path=DataContext.CancelButtonCommand}" Width="80" Height="20" />

或使用相对来源绑定

<Button Command="{Binding RelativeSource={RelativeSource AncestorType={x:Type window}},Path=DataContext.CancelButtonCommand}">