.net 多绑定数据网格selecteditems don';行不通
我使用以下方法从datagrid中获取selecteditems,它运行良好.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
<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]);