Это требует ViewModel
Этот тип проблемы, привязка хорошо работает для простого случая, но начинает падать, когда вы добавляете сценарии, является отличным показателем того, что пора использовать Модель - Вид - ViewModel .
Грубо говоря, идея в том, что у вас есть View (ваш XAML) и Model (ваши данные, в данном случае набор файлов). Но вместо прямой привязки View к данным вы добавляете промежуточный класс, называемый ViewModel. Ваш View привязывается к ViewModel, а ViewModel загружает себя из Модели. Это дает вам пространство для маневра, чтобы делать больше, чем простые вещи при загрузке данных для привязки.
Что это значит здесь? Это будет выглядеть так:
public class MainViewModel
{
// ObservableCollection adds databinding goodness so when you add a new file,
// the UI automatically refreshes
public ObservableCollection<string> Images { get; private set; }
public MainViewModel(string path)
{
Images = new ObservableCollection<string>();
Images.AddRange(Directory.GetFiles(path, "*.jpg"));
}
public void AddImage(string path)
{
Images.Add(path);
}
}
и теперь в вашем xaml вы устанавливаете свой текстовой текст данных на новый MainViewModel. Вы можете сделать это в коде или с помощью StaticResource, если вы используете StaticResource, вам нужен ctor, который не принимает параметров, поэтому вам придется установить свой начальный каталог другим способом. Ваша привязка выглядит так:
<Image Source={Binding Images} />
Внимательно посмотрите на схему M-V-VM. Вы обнаружите, что это облегчает проблемы с привязкой данных, подобные этой, а также имеет множество других преимуществ, таких как меньшее количество обработчиков событий (меньшее количество утечек ссылок), лучшую тестируемость, упрощение работы с Blend и упрощение добавления новых типов технологий пользовательского интерфейса.