.net 多绑定数据网格selecteditems don';行不通

.net 多绑定数据网格selecteditems don';行不通,.net,wpf,datagrid,.net-4.0,multibinding,.net,Wpf,Datagrid,.net 4.0,Multibinding,我使用以下方法从datagrid中获取selecteditems,它运行良好 <Button Command="{Binding DeleteDataCommand}" CommandParameter="{Binding ElementName=MyGridCtrl, Path=SelectedItems}"/> 转换器: public class MultiValueConverter : IMultiValueConverter { public

我使用以下方法从datagrid中获取selecteditems,它运行良好

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

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();
    }

}

好吧,从你的转换器的代码来看,这肯定不起作用

您不能简单地编写
返回值,您需要做更多的工作

我同意这一点:

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]);
返回((集合)值[0])。Concat((集合)值[1]);

(您可能已经/想要用您的物品的真实类型替换此处的2“
”)

什么是
grdDruckVersand
grdAusgabe
?注意:在C#代码和xaml代码之间添加一些文本,将代码演示器分成两部分,并为每种语言提供正确的颜色。如果你是对的,转换器就是问题所在。我使用:public object Convert(object[]values,Type targetType,object parameter,CultureInfo-culture){返回新的元组((IList)值[0],(IList)值[1]);},所有这些都可以正常工作。这是另一种方法:)
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();
    }

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