2

ユーザーがファイルを選択してメタデータを追加できるようにする簡単なプログラムを作成しようとしています。

ListBoxユーザーがファイルをドラッグ アンド ドロップできるようにする を作成しました。パスを取得してオブジェクトに保存します。次に、ファイル名をListBox.

ユーザーがリスト ボックス内の項目を選択したときに、ファイルにあるメタデータを表示し、さらに追加したり、そこにあるものを編集したりできるようにしたいと考えています。

現在、パスを格納するクラス アイテムと、メタデータの名前であり、値である<string, string>場所の辞書があります。KeyValue

私は 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>

4

1 に答える 1

1

INotifiyPropertyChanged を実装し、メタデータの Key と Value のプロパティを含む、独自の FileMetadata オブジェクトを作成するのが適切な別の方法です。

次に、FileMetadata オブジェクトのコレクションを ObservableCollection に格納し、DataGrid にバインドします。

これにより、個々のメタデータ項目の値が変更通知システムに永続化され、メタデータ項目が追加または削除された場合に DataGrid が自動的に更新されます。

于 2012-04-14T16:21:23.027 に答える