C# 如何识别在datagrid wpf中选择的文件列表?
我有一个datagrid,它有一个文件列表。 要允许多选,我选择了SelectionMode=“Extended”。 我可以使用Ctrl或Shift键选择多个文件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.
如何识别所选文件的列表?使用此选项从数据网格获取所选项目
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。谢谢ViVivar filesList=dataGridName.SelectedItems.Cast()
谢谢ViVi。如何通过MVVM实现这一点。您可以创建一个公共属性,它是一个Object[]变量,然后将SelectedItems绑定到它@谢谢。从来没想过用一行字写@SimplyStupid:欢迎。正如@Ben Steele所建议的,只需在ViewModel中创建一个SelectedFileList属性(确保它实现了INotifyPropertyChanged接口),并将datagrid的SelectedItems绑定到该属性,如{Binding SelectedFileList}谢谢Ben Steele。谢谢ViVi