0

私はMVVMプロジェクトを持っています。1つのビューには複数選択を許可するグリッドがあります。

<DataGrid x:Name="DataGridBodegas" ItemsSource="{Binding MyLis}" Grid.Row="1">
     <i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectionChanged">
                    <cmd:EventToCommand Command="{Binding _MyCommand}" CommandParameter="{Binding ElementName=DataGridBodegas,Path=SelectedItems}"/>
                </i:EventTrigger>
      </i:Interaction.Triggers>
      <DataGrid.Columns>
          <DataGridTextColumn Header="{x:Static resources:Labels.ACOPIO_SeleccioneBodegas}" Width="Auto" Binding="{Binding StrNombreBodega}" ClipboardContentBinding="{x:Null}"/>
      </DataGrid.Columns>
</DataGrid>

VM には ICommand があります

public override void CommandSelectionChange(object p)
{            
    MyList.RemoveAll(x=> x.IntIdBodega != -1);
    MyList = p as List<Merlin_INV_Bodegas>; // Allways return Null 
}

調べてみると、ターゲットタイプの要素を持つ ですが、このようにキャストしようとするp objectSelectedItemCollection

(List<TargetType>)p // Throw exception 
p as List<TargetType> // Allways return null 

foreach( TargetType t in p)
{
} // Throw exception 

私の質問は、 pをリストに適切にキャストするにはどうすればよいですか?

4

3 に答える 3

4

Linq を使用できますToList():

List<TargetType> list = ((TargetType[])p).ToList();

または、List<>コンストラクターを使用します。

List<TargetType> list = new List<TargetType>((TargetType[])p);

の場合は、SelectedItemCollection最初に IList としてキャストする必要があります。

List<TargetType> list = ((System.Collections.IList)p).Cast<TargetType>().ToList();
于 2013-10-03T11:47:57.510 に答える
2

これはDataGrid.SelectedItems is of type IList一般的ではないためIList<T>です。したがって、IListで型キャストする必要があります

var collection = p as IList  

foreach( var item in collection)
{
    var myitem = (TargetType)item;
} 
于 2013-10-03T11:50:57.130 に答える