Есть ComboBox который содержит коллекцию List<string> Folders
которая состоит из путей к папкам, а так же содержит строку "Добавить папку".
Что бы хотелось? Когда пользователь выбирает "Добавить папку" то открывался бы диалог выбора папки, выбранная папка добалялась бы в коллекцию Folders
и ComboBox отображал бы не "Добавить папку", а соответственно выбранную папку.
В принципе главное у меня работает, но ComboBox продолжает отображать "Добавить папку" и при выборе не обновляет у себя ComboBoxItemы.
Я понятное дело делаю что-то не так, и прошу подсказать как надо.
Вот код XAML (лишнее я поубирал):
<ComboBox ItemsSource="{Binding Folders}" SelectedItem="{Binding Directory}"/>
VeiwModel
private List<string> folders;
public List<string> Folders
{
get => folders;
set
{
folders = value;
OnPropertyChanged("Folders");
}
}
private string directory;
public string Directory
{
get { return directory; }
set
{
directory = value;
if (directory == "Добавить папку")
{
directory = chooseFolder(); //Диалог выбора папки
Folders.Insert(0, Directory);
}
// тут кое что будет
OnPropertyChanged("Directory");
}
}
Как я уже сказал в ComboBox стоит выбранная строка "Добавить папку" и варианты выбора не обновляются (хотя логика програмы дальше работает нормально, именно с той папкой которую выбрали)
Я сначала подумал, что нужно обновить ссылку на List<string> Folders
что бы всё заработало (да я только учусь, потому не пинайте сильно) и дописал такой код: (на месте комментария // тут кое что будет
)
List<string> temp = new List<string>();
temp.AddRange(Folders);
Folders = temp;
И тут мой мозг не выдержал :( В итоге имеем: если выбрать строку "Добавить папку", то прга зацикливается и происходит бесконечный вызов диалога выбора папки. Почему так происходит? Обновляю список, а вызов метода происходит будто я обновляю поле string Directory
??
И самое главное: как же всё таки правильно прописать?
Я нашёл решение на свой вопрос. К сожалению это скорее всего убогий костыль, но работает как задумывалось. А как правильно пока останется загадкой :(. Тем не менее, переписал часть кода и всё заработало как надо.
public string Directory
{
get { return directory; }
set
{
directory = value;
if (directory == "Добавить папку" && ch == true)
{
ch = false;
directory = chooseFolder(); //Диалог выбора папки
Folders.Insert(0, directory);
List<string> temp = new List<string>(folders);
Folders = temp;
Directory = Folders[0];
}
OnPropertyChanged("Directory");
ch = true;
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение
Есть класс, который унаследован от интерфейса IJobЭкемпляр этого класса у меня создается через реализацию интерфейс
Есть адрес картинки, например http://sitecom/images/image