Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何识别在datagrid wpf中选择的文件列表?_C#_Wpf_Datagrid - Fatal编程技术网

C# 如何识别在datagrid wpf中选择的文件列表?

C# 如何识别在datagrid wpf中选择的文件列表?,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个datagrid,它有一个文件列表。 要允许多选,我选择了SelectionMode=“Extended”。 我可以使用Ctrl或Shift键选择多个文件 如何识别所选文件的列表?使用此选项从数据网格获取所选项目 List<FilesData> filesList; for (int i = 0; i < dataGridName.SelectedItems.Count; i++) { filesList.Add((FilesData)dataGridName.

我有一个datagrid,它有一个文件列表。 要允许多选,我选择了SelectionMode=“Extended”。 我可以使用Ctrl或Shift键选择多个文件


如何识别所选文件的列表?

使用此选项从数据网格获取所选项目

List<FilesData> filesList;
for (int i = 0; i < dataGridName.SelectedItems.Count; i++)
{
    filesList.Add((FilesData)dataGridName.SelectedItems[i]);
}
List文件列表;
对于(int i=0;i
使用此选项从数据网格获取所选项目

List<FilesData> filesList;
for (int i = 0; i < dataGridName.SelectedItems.Count; i++)
{
    filesList.Add((FilesData)dataGridName.SelectedItems[i]);
}
List文件列表;
对于(int i=0;i
您可以查看绑定到SelectedItems属性的一些实现

基本上,有两种流行的解决方案。一种是从DataGrid派生并实现您自己的dependency属性,该属性将公开SelectedItems属性,以便可以将其用于数据绑定:

public class CustomDataGrid : DataGrid{

public CustomDataGrid ()
{
    this.SelectionChanged += CustomDataGrid_SelectionChanged;
}

void CustomDataGrid_SelectionChanged (object sender, SelectionChangedEventArgs e)
{
    this.SelectedItemsList = this.SelectedItems;
}

public IList SelectedItemsList
{
    get { return (IList)GetValue (SelectedItemsListProperty); }
    set { SetValue (SelectedItemsListProperty, value); }
}

public static readonly DependencyProperty SelectedItemsListProperty =
        DependencyProperty.Register ("SelectedItemsList", typeof (IList), typeof (CustomDataGrid), new PropertyMetadata (null));
}
另一种方法是使用System.Windows.Interactivity.dll程序集中提供的功能,创建自己的行为,或者在SelectionChanged事件发生时使用提供的触发器并调用命令:

<i:Interaction.Triggers>
 <i:EventTrigger EventName="SelectionChanged">
     <i:InvokeCommandAction Command="{Binding SelectItemsCommand}" CommandParameter="{Binding Path=SelectedItems,ElementName=YourDataGridName}"/>
 </i:EventTrigger>
</i:Interaction.Triggers>
您可以查看绑定到SelectedItems属性的一些实现

基本上,有两种流行的解决方案。一种是从DataGrid派生并实现您自己的dependency属性,该属性将公开SelectedItems属性,以便可以将其用于数据绑定:

public class CustomDataGrid : DataGrid{

public CustomDataGrid ()
{
    this.SelectionChanged += CustomDataGrid_SelectionChanged;
}

void CustomDataGrid_SelectionChanged (object sender, SelectionChangedEventArgs e)
{
    this.SelectedItemsList = this.SelectedItems;
}

public IList SelectedItemsList
{
    get { return (IList)GetValue (SelectedItemsListProperty); }
    set { SetValue (SelectedItemsListProperty, value); }
}

public static readonly DependencyProperty SelectedItemsListProperty =
        DependencyProperty.Register ("SelectedItemsList", typeof (IList), typeof (CustomDataGrid), new PropertyMetadata (null));
}
另一种方法是使用System.Windows.Interactivity.dll程序集中提供的功能,创建自己的行为,或者在SelectionChanged事件发生时使用提供的触发器并调用命令:

<i:Interaction.Triggers>
 <i:EventTrigger EventName="SelectionChanged">
     <i:InvokeCommandAction Command="{Binding SelectItemsCommand}" CommandParameter="{Binding Path=SelectedItems,ElementName=YourDataGridName}"/>
 </i:EventTrigger>
</i:Interaction.Triggers>

var filesList=dataGridName.SelectedItems.Cast()
谢谢ViVi。如何通过MVVM实现这一点。您可以创建一个公共属性,它是一个Object[]变量,然后将SelectedItems绑定到它@谢谢。从来没想过用一行字写@SimplyStupid:欢迎。正如@Ben Steele所建议的,只需在ViewModel中创建一个SelectedFileList属性(确保它实现了INotifyPropertyChanged接口),并将datagrid的SelectedItems绑定到该属性,如{Binding SelectedFileList}谢谢Ben Steele。谢谢ViVi
var filesList=dataGridName.SelectedItems.Cast()
谢谢ViVi。如何通过MVVM实现这一点。您可以创建一个公共属性,它是一个Object[]变量,然后将SelectedItems绑定到它@谢谢。从来没想过用一行字写@SimplyStupid:欢迎。正如@Ben Steele所建议的,只需在ViewModel中创建一个SelectedFileList属性(确保它实现了INotifyPropertyChanged接口),并将datagrid的SelectedItems绑定到该属性,如{Binding SelectedFileList}谢谢Ben Steele。谢谢ViVi