将CommandParameter绑定到DataGrid中的Button的DataItem

时间:2013-11-19 18:13:45

标签: c# wpf mvvm wpfdatagrid

我在DataGrid中有一个按钮。我需要将此按钮的CommandParame绑定到DataItem,以便其命令的谓词将接收有关哪一段数据连接到给定行的按钮的信息。

我正在使用MVVM。到目前为止,所有对象都已绑定,而不是使用显式命名或事件处理程序。该按钮用于数据过滤过程。该命令有效,因为单击按钮时,ViewModel中的ICollectionView对象获取正确的CurrentItem。不幸的是,无论选择哪一行,Predicate都需要运行。

我的观点如下:

<DataGrid Margin="5" ItemsSource="{Binding GridSource}"  AutoGenerateColumns="False" IsSynchronizedWithCurrentItem="True" >
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding Time}" Header="Time" CanUserSort="False"></DataGridTextColumn>
            <DataGridTextColumn Binding="{Binding Name}" Header="Name" CanUserSort="False"></DataGridTextColumn>                
            <DataGridTemplateColumn Header="Exclude Data">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Content="Exclude" Command="{Binding DataContext.ExcludeCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

请注意,我必须在命令绑定上使用RelativeSource。我认为我目前的问题与此有关。我已经尝试了很多东西,包括CommandParameter="{Binding}"和几个相对公式,但谓词中的参数总是通过null。我发现的唯一例外是当我命名UIElement并使用它时。例如:CommandParameter="{Binding ElementName="SomeName"}"是否有一个元素和属性(Path值)将(或应该)绑定每行按钮中的正确DataItem?

谢谢!

0 个答案:

没有答案