1

我使用以下内容从数据网格中获取所选项目,并且工作正常。

<Button Command="{Binding DeleteDataCommand}" 
        CommandParameter="{Binding ElementName=MyGridCtrl, Path=SelectedItems}"/>

现在我有一个命令需要来自 2 个数据网格的 2 个选定项列表。所以我尝试了以下多重绑定:

<Button.CommandParameter>
    <MultiBinding Converter="{StaticResource MyMultiValueConverter}">
        <Binding ElementName="grdDruckVersand" Path="SelectedItems"/>
        <Binding ElementName="grdAusgabe" Path="SelectedItems"/>
     </MultiBinding>
 </Button.CommandParameter>

我的converter.Convert()方法在初始化时调用一次,但CommandParameter始终为空。也许我错过了一些东西......

编辑: grdDruckVersand 和 grdAusgabe 是 DataGrids

 <DataGrid x:Name="grdDruckVersand " ...
 <DataGrid x:Name="grdAusgabe " ...

转换器:

public class MultiValueConverter : IMultiValueConverter
{

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return values;
    }


    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }

}
4

1 回答 1

2

好吧,从转换器的代码来看,这绝对行不通。

你不能简单地写return Values;,你需要做更多。

我会这样做:

public class MultiValueConverter : IMultiValueConverter
{

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        // Caution: overdetailed code following:

        var itemsToDeleteFromGrdDruckVersand = values[0]
        var itemsToDeleteFromGrdAusgabe = values[1]

        var itemsToDelete = itemsToDeleteFromGrdDruckVersand;

        foreach (var item in itemsToDeleteFromGrdAusgabe)
        {
           itemsToDelete.Add(item);
        }
        // you can do a lot better with Linq if you want

        return itemsToDelete;
    }


    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }

}

关键是您的 commandParameters 想要一个集合,而您要给他一个包含 2 个集合的集合。因此,您需要将这两个集合合并为一个才能使其正常工作。

编辑:只是为了好玩,这里是使用 Linq 的代码:

return ((Collection<object>)values[0]).Concat((Collection<object>)values[1]);

(您可能已经/想要将<object>此处的 2“”替换为您的项目的真实类型)

于 2011-04-11T13:17:02.673 回答