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()メソッドは初期化時に1回呼び出されますが、CommandParameter常にnullです。多分私は何かが欠けています...

編集:grdDruckVersandとgrdAusgabeはDataGridです

 <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が1つのコレクションを必要とし、2つのコレクションのコレクションを彼に与えているということです。したがって、これら2つのコレクションを1つにマージして、機能させる必要があります。

編集:楽しみのために、Linqを使用したコードを次に示します。

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

<object>(ここで2 ""を実際のアイテムのタイプに置き換える必要がある場合があります)

于 2011-04-11T13:17:02.673 に答える