我正在尝试创建一个简单的程序,允许用户选择文件并向其添加元数据。
我创建了一个ListBox
,允许用户将文件拖放到其上。我抓住路径并将其保存到对象中。然后,我在ListBox
。
我想要它,以便当用户选择列表框中的项目时,我可以显示我在文件上的元数据,并允许他们添加更多内容并编辑其中的内容。
现在我有存储该路径及的字典一类项<string, string>
当Key
是所述元数据的名称和Value
是很好的值。
我已经尝试过使用DataGrid,也许这是使用错误的控件来绑定到Dictionary。这似乎不是正确的方法,因为它没有实现INotifyPropertyChanged
接口。
我可以创建自己的类并手动更新DataGrid,但这似乎是我不知道如何正确使用DataBind的工作。
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>
答案 0 :(得分:1)
另一种适用于您的方法是创建自己的FileMetadata对象,该对象实现INotifiyPropertyChanged并包含元数据的Key和Value的属性。
然后将您的FileMetadata对象集合存储在ObservableCollection中并绑定到DataGrid。
这将允许单个元数据项将其值保留到更改通知系统,并允许DataGrid在添加或删除任何元数据项时自动更新。