Wpf 数据网格上的双向绑定

Wpf 数据网格上的双向绑定,wpf,.net-4.0,Wpf,.net 4.0,我试图创建一个简单的程序,允许用户选择文件并向其中添加元数据 我创建了一个列表框,允许用户将文件拖放到它上面。我抓取路径并将其保存到一个对象中。然后在列表框中显示文件名 我希望这样,当用户在列表框中选择一个项目时,我可以显示文件中的元数据,并允许他们添加更多内容和编辑其中的内容 现在我有一个存储路径的类项和一个字典,其中键是元数据的名称,值是元数据的值 我曾尝试使用DataGrid绑定到字典,可能这是一个错误的控件。这似乎不是正确的方法,因为它没有实现INotifyPropertyChanged

我试图创建一个简单的程序,允许用户选择文件并向其中添加元数据

我创建了一个
列表框
,允许用户将文件拖放到它上面。我抓取路径并将其保存到一个对象中。然后在
列表框中显示文件名

我希望这样,当用户在列表框中选择一个项目时,我可以显示文件中的元数据,并允许他们添加更多内容和编辑其中的内容

现在我有一个存储路径的类项和一个
字典,其中
键是元数据的名称,
值是元数据的值

我曾尝试使用DataGrid绑定到字典,可能这是一个错误的控件。这似乎不是正确的方法,因为它没有实现
INotifyPropertyChanged
接口

我可以创建自己的类并手动更新DataGrid,但这似乎是一个我不知道如何正确数据绑定的工作

XAML

<Window
    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"
    mc:Ignorable="d"
    x:Class="MetadataAdder.MainWindow"
    Title="Metadata Adder" Height="480" Width="640">
<Grid>
    <Button x:Name="Add_BTN" Content="Add" HorizontalAlignment="Left" Margin="10,410,0,0" VerticalAlignment="Top" Width="50" Click="Add_Click"/>
    <Button x:Name="Remove_BTN" Content="Remove" HorizontalAlignment="Left" Margin="241,410,0,0" VerticalAlignment="Top" Width="50" Click="Remove_Click"/>
    <ListBox x:Name="File_List" HorizontalAlignment="Left" Height="364" Margin="10,31,0,0" VerticalAlignment="Top" Width="281" AllowDrop="True" Drop="FilesDropped" ItemsSource="{Binding Item_List}" SelectionChanged="Item_Selected"/>
    <DataGrid 
        x:Name="MetadataGrid" 
        HorizontalAlignment="Left" 
        Margin="311,31,0,0" 
        VerticalAlignment="Top" 
        Height="364" 
        Width="303" 
        d:LayoutOverrides="GridBox"
        CanUserAddRows="False"
        CanUserDeleteRows="False"
        CanUserReorderColumns="True"
        CanUserResizeColumns="True"
        CanUserResizeRows="True"
        CanUserSortColumns="True"
        />
    <Label Content="Files to add Metadata to" HorizontalAlignment="Left" Margin="10,0,0,0" VerticalAlignment="Top"/>
    <Label Content="Metadata" HorizontalAlignment="Left" Margin="313,5,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.474,0.115"/>

</Grid>


另一种适合您的方法是创建自己的FileMetadata对象,该对象实现InotifyPropertyChanged,并包含元数据键和值的属性

然后将FileMetadata对象的集合存储在ObservableCollection中,并绑定到DataGrid


这将允许单个元数据项将其值持久化到更改通知系统,并允许DataGrid在添加或删除任何元数据项时自动更新。

这是一种有趣的方法。好的,我会调查的。