выбранные элементы сетки связывания данных не работают - PullRequest
1 голос
/ 11 апреля 2011

Я использую следующее, чтобы получить выбранные элементы из таблицы данных, и она отлично работает.

<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>

метод my converter.Convert() вызывается один раз при инициализации, но CommandParameter всегда равен нулю. Может быть, я что-то упустил ...

РЕДАКТИРОВАТЬ: grdDruckVersand и grdAusgabe являются сетками данных

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

}

1 Ответ

2 голосов
/ 11 апреля 2011

ну, из кода вашего конвертера, это определенно может не работать.

вы не можете просто написать 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 коллекций.Поэтому вам нужно объединить эти две коллекции в одну, чтобы заставить его работать.

edit: просто для удовольствия, вот код, использующий Linq:

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

(возможно,/ хотите заменить 2 "<object>" здесь реальными типами ваших предметов)

...