1

DataGrid.SelectedItems から汎用 List への汎用 Converter を作成しようとしています

public class SelectedItemsToListConverter : BaseConverter, IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        DataGrid dg =  (DataGrid)parameter;  
        Type type = parameter.GetType().MemberType.GetType();

        return dg.SelectedItems.OfType<type.GetType()>().ToList();
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

objectパラメーターでは、全体を割り当てています。DataGrid希望を持って、の基本型を取得できますItemsSource

しかし、試してみると

dg.SelectedItems.OfType<type.GetType()>().ToList();

また

dg.SelectedItems.OfType<type>().ToList();

タイプを認識しません。

タイプを取得してに渡すにはどうすればよいdg.SelectedItems.OfType<T>ですか?

これを実行する汎用コンバーターは既にありますか?

注:SelectedItemsのパラメーターとして使用するように変換する必要がありますICommand。コマンドは を想定してList<T>おり、コンバーターはSelectedItemsList<T>

<DataGrid x:Name="CausacionesDisponibles" GridLinesVisibility="Vertical" SelectionUnit="FullRow" ItemsSource="{Binding CausacionesRealizadasAlTercero}" IsReadOnly="True" AutoGenerateColumns="False">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="SelectionChanged">
            <cmd:EventToCommand Command="{Binding DetallarCausacionCommand}" CommandParameter="{Binding ElementName=CausacionesDisponibles,Path=SelectedItems}" HERE NEED TO USE THE CONVERTER/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding StrIdDocumento}" Header="{x:Static resources:Labels.GENERAL_IdDocumeto}"/>
        <DataGridTextColumn Binding="{Binding DatFechaDocumento}" Header="{x:Static resources:Labels.GENERAL_FechaDocumento}"/>
        <DataGridTextColumn Binding="{Binding StrUsuarioGenera,StringFormat=\{0:d\}}" Header="{x:Static resources:Labels.GENERAL_GeneradoPor}"/>
    </DataGrid.Columns>
</DataGrid>
4

2 に答える 2

0

次のようなことを試しましたか:

public class SelectedItemsToListConverter<TIn, TOut> : BaseConverter, IValueConverter where TIn : class where TOut : class
{
    public IEnumerable<TOut> Convert(object value, object parameter, System.Globalization.CultureInfo culture)
    {
        DataGrid dg = parameter as DataGrid;  
        // You might need some conversion logic here
        return dg.SelectedItems.OfType<TIn>();
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

私はあなたが達成しようとしていることを誤解しているかもしれないので、このアドバイスは一粒の塩で受け取ってください. おそらく、他の誰かがこれにアプローチする方法についてより良いアイデアを持っているかもしれません。

于 2013-11-02T19:12:42.477 に答える