在telerik Datagrid中使用多重绑定

时间:2011-11-03 15:05:27

标签: wpf data-binding telerik mvvm-light telerik-grid

如何在命令参数中传递多个参数。

这是我想要做的:  我想发送是否检查(我可以通过向绑定对象引入布尔字段来实现此目的。但我不想这样做)并且我想要为该行发送所选数据对象。

                <telerik:GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerik:GridViewDataControl}}, Path=DataContext.LineItemSelection}">
                            <CheckBox.CommandParameter>
                                <MultiBinding Converter="{StaticResource CommandConverter}">
                                    <Binding Path="IsChecked" />
                                    <Binding RelativeSource="{RelativeSource Self}"/>
                                </MultiBinding>
                            </CheckBox.CommandParameter>
                        </CheckBox>
                    </DataTemplate>
                </telerik:GridViewColumn.CellTemplate>

更新

我添加了一个名为selection Item的类。要了解转换器的用途。

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        SelectionItem si = new SelectionItem();
        foreach (var value in values)
        {
            Type t = value.GetType();
            if (t.FullName == "System.Boolean")
                si.IsSelected = (bool) value;
            else
            {
                si.SelectedCustomer = value as Customer;
            }
        }
        return si;
    }

如果我使用

,则第二个参数的类型是复选框本身
    <Binding RelativeSource="{RelativeSource Self}"/>

这里我想要绑定到该行的数据项(在本例中为Customer)。 我甚至尝试过使用

    <Binding RelativeSource= "{RelativeSource FindAncestor, AncestorType={x:Type telerik:GridViewColumn}}" Path="DataContext"  />

但这也是空的。这是为什么?

2 个答案:

答案 0 :(得分:0)

通过传入转换器当前绑定源尝试简单绑定,然后转换为底层对象并基于IsChecked返回一个值。

<DataTemplate>
      <CheckBox Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerik:GridViewDataControl}}, Path=DataContext.LineItemSelection}">
         <CheckBox.CommandParameter>
               <MultiBinding Converter="{StaticResource CommandConverter}">
                     <Binding Path="IsChecked" />
                     <Binding RelativeSource="{RelativeSource Self}"/>
                </MultiBinding>
         </CheckBox.CommandParameter>
       </CheckBox>
</DataTemplate>
 // CommandConverter should simply return the values
 public object Convert(...)
 {
     return values;
 }

现在在命令处理程序中,您将能够访问参数:

public void OnLineItemSelection(object parameter)
{
    object[] parameters = (object[])parameter;
    bool isChecked = (double)parameters[0];
    var instance = (TYPENAME)parameters[1];
}

答案 1 :(得分:0)

使用

<CheckBox Name="chkSelection" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type telerik:GridViewDataControl}}, Path=DataContext.LineItemSelection}">
    <CheckBox.CommandParameter>
        <MultiBinding Converter="{StaticResource CommandConverter}">
            <Binding Path="IsChecked" ElementName="chkSelection" />
            <Binding />
        </MultiBinding>
    </CheckBox.CommandParameter>
</CheckBox>

做了这个伎俩