DependencyProperty
のレイトバインディングのようなものを作成したいと思います。 私はListView
のアイコンを持っています。アイコンが実際に必要/表示されるときにのみロードされます。アイコン要素が表示されると、IconProperty
のGetValue
が呼び出されますが、デフォルト値(null
)しか返されません。私は、初期値がnull
のときに関連するアイコンをロードするコードを注入したい。DependencyPropertyを最初に読み込んだときのコードの実行方法は?
私の最初のアプローチは、DependencyProperty
を一切使わずにプロパティのカスタムゲッター/セッターを作成することでした。しかし、それは最適かどうか疑問に思う。
私がDependencyProperty
を使用した場合、変更された時刻はいつ変更されるのかは、OnPropertyChanged
で簡単に判断できます。私はいつgetterの初期化を注入すべきか分かりません。
public class DisplayItem : DependencyObject {
// ...
public static readonly DependencyProperty IconProperty =
DependencyProperty.Register(
"Icon",
typeof(ImageSource),
typeof(DisplayItem),
null
);
public ImageSource Icon {
get { return (ImageSource)GetValue(IconProperty); }
private set { SetValue(IconProperty, value); }
}
private void GetIcon() {
// Some code to actually fetch the icon image...
// ...
Icon = loadedImageSource;
}
// ...
}
は、上記のコードを考えてみましょう:最初のGetValue()
が発生する前に、正確にGetIcon()
を呼び出す方法?
[async binding](https://msdn.microsoft.com/en-us/library/system.windows.data.binding.isasync(v = vs.110).aspx)を使用すると、それは初めて要求されたものです。 MVVMを使用することを検討してください。依存関係のプロパティは必要ありませんが、通知付きの単純なもの( 'INotifyPropertyChanged')が必要です。アイテムビューモデル( 'ListView.ItemsSource'にバインドされているコレクション)はIconを保持できます。 – Sinatr
非同期バインディングに言及してくれてありがとうございます。これはアイコンの正しい選択のようですが、とにかくここでMVVMを実装しました。私の 'DisplayItem'が' ItemSource'によって使用される 'ObservableCollection'に属していると考える方が良いでしょう。 – Harry