0

INotifyPropertyChanged インターフェイスを持つ bindinglist があります。物事はうまくいきます。この bindinglist は、リストボックスにバインドされているファイル名のリストです。パス全体ではなく名前だけを表示したいのですが、ファイル名を選択してファイルをロードするときにパス全体が必要です。

この目的で IValueConverter を使用しています。ここでは、Path.GetFileName プロパティを使用してフル パスをファイル名に変更します。バインディングは正しいのですが、バインディング リストが希望どおりに値を変更していません。以下に IValueConverter コードを貼り付けています。このコードの何が問題なのか教えてください。ここで変換を参照しました。

[ValueConversion(typeof(string), typeof(string))]
public class pathtoname : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter ,CultureInfo culture)
    {
        BindingList<string> ls = value as BindingList<string>;
        ls.Select(x => "WW");
        return ls;//all values should be WW. But they are not.(debugger)
    }

    public object ConvertBack(object value, Type targetType, object parameter,CultureInfo culture)
    {
        return null;
    }

}

編集: 値が変換されるようになりました。しかし、パス全体を取得するにはどうすればよいでしょうか? 2 つのリストを保持しますか? 1 つはフル パス用で、もう 1 つはhereのような名前です。より良い解決策はありますか?

4

1 に答える 1

1

ファイル名とフルパスを返すには、新しいクラスを作成する必要があります:

public class MyFile
{
    public string Filename { get; set; }
    public string Fullpath { get; set; }
}

その後、コンバーターで MyFile のリストを返す必要があります

[ValueConversion(typeof(string), typeof(string))]
public class pathtoname : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter ,CultureInfo culture)
    {
        BindingList<string> ls = value as BindingList<string>;
        List<MyFile> files = new List<MyFile>();
        foreach (string s in ls)
        {
            files.Add(new MyFile() { Filename = Path.GetFileName(s), Fullpath = s });
        }

        return files;
    }

    public object ConvertBack(object value, Type targetType, object parameter,CultureInfo culture)
    {
        return null;
    }
}

最後に、リストボックスで、MyFile の DataBinding プロパティを使用して取得できます

それが助けになることを願っています!

于 2013-07-01T14:45:13.337 に答える