我在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的其他属性,例如Width
,ActualHeight
等但没有用。我在这里缺少什么?
答案 0 :(得分:1)
这里的问题是名称范围。简而言之,DataTemplate
中的XAML有自己的'namescope',并且看不到它之外的任何名称。特别是,它无法找到位于DataGrid
之外的父DataTemplate
。
我不确定你为什么要听取检查和取消选中的事件并根据它们发出命令。你想要实现的目标并不完全清楚。相反,我将使用双向绑定将IsChecked
的{{1}}属性绑定到(行级)视图模型类中的CheckBox
属性,并调用命令此bool
属性的setter的功能。您可以通过使用双向绑定将视图模型属性绑定到bool
s DataGrid
属性来获取所选项目。
答案 1 :(得分:0)
我认为你应该使用像
这样的EventTrigger<is:EventTrigger EventName="Checked">
<is:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.CheckBoxUncheckedCommand}" CommandParameter="{Binding}"/>
</is:EventTrigger>