我使用以下内容从数据网格中获取选定项目,并且工作正常。
<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
始终为null。也许我错过了什么......
编辑: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();
}
}
答案 0 :(得分: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]);
(您可能/想要根据您的项目的真实类型替换2“<object>
”