2012-04-14 120 views
2

我想創建一個簡單的程序,允許用戶選擇文件並向其中添加元數據。DataGrid上的雙向綁定

我創建了一個ListBox,允許用戶將文件拖放到其上。我抓住路徑並將其保存到一個對象中。然後我在ListBox中顯示文件名。

我希望這樣,當用戶選擇列表框中的項目時,我可以顯示文件中的元數據,並允許他們添加更多內容並編輯它。

現在我有一個存儲路徑和<string, string>字典的類項,其中Key是元數據的名稱,並且Value是很好的值。

我已經嘗試使用DataGrid,也許這是錯誤的控件來使用,綁定到詞典。這似乎不是正確的方式,因爲它不實現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> 

回答

1

另一種方法,將工作很好地爲您將創建自己的實現INotifiyPropertyChanged幷包含元數據的鍵和值屬性的FileMetadata對象。

然後將您的FileMetadata對象集合存儲在ObservableCollection中並綁定到您的DataGrid。

這將允許單個元數據項目將其值保存到更改通知系統,並允許DataGrid在添加或刪除任何元數據項目時自動更新。

+0

這是一個有趣的方法。好的,我會研究它。 – 2012-04-15 03:19:30

+0

這比我想象的要容易得多。 – 2012-04-16 13:08:45