Как привести DependencyObject к FileInfo в PropertyChangedCallback
У меня есть FileInfo
введите DependencyProperty и в PropertyChangedCallback
Я не могу разыграть DependencyObject
в FileInfo
тип.
public static readonly DependencyProperty TargetFileProperty =
DependencyProperty.Register("TargetFile", typeof(System.IO.FileInfo), typeof(FileSelectGroup), new PropertyMetadata(propertyChangedCallback: new PropertyChangedCallback());
private PropertyChangedCallback OnTargetFileChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var f = (System.IO.FileInfo)d; // THIS LINE GIVES ERROR BELOW
}
Ошибка:
Не удается преобразовать тип "System.Windows.DependencyObject" в "System.IO.FileInfo"
Я подумал, может быть, я упустил что-то очевидное (возможно, я), но Microsoft и этот ответ, похоже, согласны, что я поступаю примерно правильно.
1 ответ
Решение
d
относится к элементу управления, где определено свойство зависимости, т.е. FileSelectGroup
,
Вы должны быть в состоянии разыграть e.NewValue
к System.IO.FileInfo
чтобы получить новое значение свойства зависимости:
private PropertyChangedCallback OnTargetFileChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var f = e.NewValue as System.IO.FileInfo;
if (f != null)
{
//...
}
}
В качестве альтернативы вы могли бы d
в FileSelectGroup
и получить доступ к TargetFile
свойство контроля:
private PropertyChangedCallback OnTargetFileChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var ctrl = d as FileSelectGroup;
if (ctrl != null)
{
System.IO.FileInfo f = ctrl.TargetFile;
if (f != null)
{
}
}
}