0

我在我的 Silverlight 项目中使用 DataGrid,其中包含一个自定义复选框列。我已将其Command属性绑定到我的 ViewModel 类的属性。现在,问题是我想通过我编写了以下代码的命令参数发送 DataGrid 的“选定项”:

<sdk:DataGrid AutoGenerateColumns="False" Margin="10,0,10,0" Name="dataGridOrders" ItemsSource="{Binding OrderList}" Height="190">
    <sdk:DataGrid.Columns>
        <sdk:DataGridTemplateColumn Header="Select">
            <sdk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox>
                        <is:Interaction.Triggers>
                            <is:EventTrigger EventName="Checked">
                                <is:InvokeCommandAction Command="{Binding Source={StaticResource ExecutionTraderHomePageVM},Path=OrderSelectedCommand,Mode=TwoWay}"
                                                        CommandParameter="{Binding ElementName=dataGridOrders,Path=SelectedItem}" />
                            </is:EventTrigger>
                            <is:EventTrigger EventName="Unchecked">
                                <is:InvokeCommandAction Command="{Binding Source={StaticResource ExecutionTraderHomePageVM},Path=OrderSelectedCommand,Mode=TwoWay}"
                                                        CommandParameter="{Binding ElementName=dataGridOrders,Path=SelectedItem}" />
                            </is:EventTrigger>
                        </is:Interaction.Triggers>
                    </CheckBox>

但是我总是null输入我的命令Execute方法的参数。我尝试过使用 DataGrid 的其他属性,例如等WidthActualHeight但没有用。我在这里想念什么?

4

2 回答 2

1

这里的问题是名称范围之一。简而言之,a 内部的 XAMLDataTemplate有自己的“名称范围”,并且在它之外看不到任何名称。特别是,它将无法找到父级DataGrid,因为它位于DataTemplate.

我不确定您为什么要监听已检查和未检查的事件并根据它们触发命令。目前尚不完全清楚您要达到的目标。相反,我将使用双向绑定将 的IsChecked属性绑定CheckBoxbool(行级)视图模型类中的属性,并从此bool属性的设置器中调用命令功能。您可以通过双向绑定将 view-model 属性绑定到DataGridsSelectedItem属性来获取所选项目。

于 2012-10-28T14:01:43.117 回答
0

我认为你应该像使用 EventTrigger

<is:EventTrigger EventName="Checked">
<is:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.CheckBoxUncheckedCommand}"  CommandParameter="{Binding}"/>
                                </is:EventTrigger>
于 2012-10-29T18:18:48.210 回答