次のコードがあります。
したがって、基本的には、イベントが発生DelegateCommand
したときにコマンド (弱参照デリゲートに基づく) を実行します。Selector.SelectionChanged
public static readonly DependencyProperty SelectionCommandProperty
= DependencyProperty.RegisterAttached(
"SelectionCommand",
typeof(ICommand),
typeof(CommonUtilities),
new PropertyMetadata(null, OnSelectionCommandPropertyChanged));
private static void OnSelectionCommandPropertyChanged(
DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var selector = d as Selector;
var command = e.NewValue as ICommand;
if (selector != null && command != null)
{
selector.SelectionChanged
+= (o, args) => command.Execute(selector.SelectedItem);
}
}
public static ICommand GetSelectionCommand(DependencyObject d)
{
return d.GetValue(SelectionCommandProperty) as ICommand;
}
public static void SetSelectionCommand(DependencyObject d, ICommand value)
{
d.SetValue(SelectionCommandProperty, value);
}
コンテキストは静的であることに注意してください。
これは漏れの原因になりますか?私の知る限り、すべての「外部」変数 (つまりselector
、command
ここ) のスコープが GC に適用されなくなるまで、匿名ハンドラーが有効になるため、そうではないと推測できます。View
(それは を持っているselector
) とViewModel
(それは を供給している) が親 GUI からアンロードされたときに発生する GC が行われるとcommand
、匿名デリゲートもフック解除されます。
私はここにいますか?