绑定在silverlight中无法正常工作

时间:2012-10-28 10:44:11

标签: c# silverlight binding

我在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等但没有用。我在这里缺少什么?

2 个答案:

答案 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>