Внутри окна вы можете увидеть метод InitializeComponent. Он создает все вещи, определенные в XAML, и применяет все привязки. После того, как привязка была применена с вашей пустой коллекцией (которую вы создали со значением свойства по умолчанию), привязка не будет знать ни об изменении этого свойства, что было правильным ответом.
Но реализация INotifyPropertyChanged больше относится к экземплярам модели представления, а не к визуальному.
Я действительно предлагаю вам использовать свойство зависимости для окон и элементов управления, если вы хотите связать. Для этого есть несколько причин:
- Установщик свойств зависимости имеет встроенный механизм уведомления.
- Если вы связываете один DP с другим DP, значение распределяется между ними.
- В конце концов, это подход WPF =)
Вот как будет выглядеть ваше окно после изменения
public partial class UsbFileSelector : Window
{
public static readonly DependencyProperty UsbFilesProperty =
DependencyProperty.Register("UsbFiles", typeof(ObservableCollection<UsbFile>), typeof(UsbFileSelector));
public ObservableCollection<UsbFile> UsbFiles
{
get { return (ObservableCollection<UsbFile>) GetValue(UsbFilesProperty); }
set { SetValue(UsbFilesProperty, value); }
}
public UsbFileSelector()
{
InitializeComponent();
}
}
Кроме того, я настоятельно рекомендую вам использовать инструмент инспектора WPF при разработке для WPF, например, snoop. Вы можете перемещаться по элементам управления и свойствам во время работы приложения и гораздо быстрее находить проблемы из кода или из stackoverflow =)