私はWPFには比較的新しいので、私が見ていないという明白な、または簡単な答えがある場合は謝ります。オブザーブブルコレクション内の文字列の一部にのみテキストブロックのコンテンツをバインドできますか?
私は、ObservableCollectionをいくつかの異なるサイズの画像でそれぞれ持っています。 各イメージの相対パスは、イメージファイルが異なるサブフォルダに格納された状態で、文字列形式です。
画像パスは形式である:
imagepath = @"subfolder/subfolder/filename.png"
Iが身に結合できるようにしたいが、画像のパスを変更することなく、各画像の下にファイル名のみを示すであろう。これは可能ですか?私はいくつかの種類のコンバータを必要とするだろうが、私は文字列の一部だけを表示する合理的な方法を見つけることができないので、私はそれで苦労してきた。
ありがとうございました。
編集
明確にするために、私の「の値は、」観察可能なコレクションなどの項目を参照し、非静的です。
ObservableCollection<Icon> items = new ObservableCollection<Item>();
items.Add(new Item{imagename = "someimagename",
imagepath= "somefolder/somesubfolder/somefilename.png"}) etc...
私は自分のコレクションから値を取得することでグリップを始めます。 item.imagepathの動的な値を取得するための 'value.Tostring()'部分の記入に関する助けは本当にありがとうございます。
class getFilenameFromPathConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{ Item item = value as Item;
PropertyInfo info = value.GetType().GetProperty("imagepath");
string filename = info.GetValue(item, null).ToString();
return System.IO.Path.GetFileNameWithoutExtension(filename); }
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
をしかし、私は処理されない例外を取得しています:
私は現在、これらの線に沿ってしようとしてきたSystem.NullReferenceException:オブジェクト参照がオブジェクトインスタンスに設定されていません。
おかげ
はやって意味: 'リターンシステム.IO.Path.GetFileName(item.imagepath.ToString()); ' – Chris
@Chrisここにテキストボックスの「テキスト」バインディング式(XAML)を貼り付けることはできますか? –
以下の手順に従ってください。 1)コンバータの「変換」メソッドにブレークポイントを設定します。 2)ブレークポイントがヒットすると、渡されている「値」パラメータがチェックされます。 「値」パラメータがファイルパスと等しい場合は、良好です。もし私に知らせてくれないなら。 3)ステップ2が成功したら、変換メソッドを空にして、次の行だけを追加します。 return Path.GetFileNameWithoutExtension(value。ToString()); お試しください。 –