Как привести 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)
        {

        }
    }
}
Другие вопросы по тегам