如何用多个选定的文件名填充WPF DataGrid以进行编辑?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用多个选定的文件名填充WPF DataGrid以进行编辑?相关的知识,希望对你有一定的参考价值。
我正在尝试在WPF中创建一个非常简单的批处理文件重命名器应用程序。 WinForms中的实现很容易,但是在这里,我感觉我尝试了很多不同的实现。我是WPF的新手,也是C#的新手。
简而言之,我想将文件读入列表或类中,但是建议实施。将其绑定到Datagrid,将可编辑的文件名读回到列表或列表类中。
我已经在此上浪费了很多时间,在这一点上,我真的会请人帮忙。
[很抱歉,如果有人提出这个问题,我在这里看到的所有内容看起来都很酷,但在我的情况下仍然没有用。
非常感谢
XAML
<Window x:Class="RenamerApp_3._0.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:FileInfo;assembly=FileCollection"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="8*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0" x:Name="BtnBrowse" Content="Browse" Click="BtnBrowse_Click" />
<TextBox Grid.Column="1" x:Name="TxtbxActiveDir" />
<Button Grid.Column="2" x:Name="BtnApply" Content="Apply" />
</Grid>
<DataGrid x:Name="DataGridFileNames" ItemsSource="Binding FileCollection">
<DataGrid.Columns>
<DataGridTextColumn x:Name="OriginalFileNamesColumn" Header="Original" Width="*"
IsReadOnly="True" />
<DataGridTextColumn x:Name="NewFileNamescolumn" Header="New" Width="*"
IsReadOnly="False" />
</DataGrid.Columns>
</DataGrid>
</StackPanel>
</Grid>
</Window>
背后的代码
namespace RenamerApp_3._0
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
OpenFileDialog dialog = new OpenFileDialog();
public MainWindow()
InitializeComponent();
InitializeOpenFileDialog();
private void BtnBrowse_Click(object sender, RoutedEventArgs e)
Nullable<bool> result = dialog.ShowDialog();
if (result.HasValue && result.Value)
List<string> fileNames = dialog.FileNames.ToList();
FileName.FileCollection collection = new FileName.FileCollection(fileNames);
DataGridFileNames.DataContext = collection;
private void InitializeOpenFileDialog()
this.dialog.Multiselect = true;
FileInfo类
namespace FileInfo
public class FileName
public string originalFileName get; set;
public string newFileName get; set;
public FileName()
public class FileCollection : List<FileName>, INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
public FileCollection(List<string> fileNames)
foreach (var item in fileNames)
this.Add(new FileName() originalFileName = item, newFileName = item );
答案
XAML
<DataGrid x:Name="DataGridFileNames" ItemsSource="Binding" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn x:Name="OriginalFileNamesColumn" Header="Original" Width="*" Binding="Binding originalFileName" IsReadOnly="True" />
<DataGridTextColumn x:Name="NewFileNamescolumn" Header="New" Width="*" Binding="Binding newFileName" IsReadOnly="False" />
</DataGrid.Columns>
</DataGrid>
当集合被赋给DataContext时,ItemsSource仅使用Binding。没有绑定路径。 DataGridTextColumn需要向数据对象成员添加Binding。
FileName类
public class FileName
public string originalFileName get; set;
public string newFileName get; set;
不需要列出<>,INotifyPropertyChanged。 ObservableCollection是进行双向绑定的简便方法。
MainWindow
public partial class MainWindow : Window
OpenFileDialog dialog = new OpenFileDialog();
public ObservableCollection<FileName> fileNames = new ObservableCollection<FileName>();
public MainWindow()
InitializeComponent();
InitializeOpenFileDialog();
private void BtnBrowse_Click(object sender, RoutedEventArgs e)
Nullable<bool> result = dialog.ShowDialog();
if (result.HasValue && result.Value)
foreach(string filename in dialog.FileNames)
FileName fileName = new FileName() originalFileName = filename ;
fileNames.Add(fileName);
DataGridFileNames.DataContext = fileNames;
private void InitializeOpenFileDialog()
this.dialog.Multiselect = true;
以上是关于如何用多个选定的文件名填充WPF DataGrid以进行编辑?的主要内容,如果未能解决你的问题,请参考以下文章
WPF的DataGrid中如何获取当前被选定的行的第一个单元格的值?