У меня есть наблюдаемая коллекция, связанная со списком в WPF. Одним из вариантов в окне является использование OpenFileDialog для добавления элемента в список с определенными свойствами. Когда я использую OpenFileDialog, он сразу устанавливает два свойства нового элемента в наблюдаемой коллекции. Я использую INotifyPropertyChanged для обновления списка. Эти два новых свойства установлены правильно, и теперь список должен отображать заголовок, содержащийся в новом свойстве заголовка, а текстовое поле заголовка, которое привязано к списку, также должно отображать новый заголовок. Однако ни один из них не отображает новый заголовок после закрытия OpenFileDialog, и когда я щелкаю по другому элементу в списке и возвращаюсь к элементу, который я только что изменил, он обновляет текстовое поле заголовка, но заголовок, отображаемый в поле списка, не изменяется до тех пор, пока я перемещаю элемент в списке, который я хочу изменить.
Вот код привязки.
ItemsSource="{Binding Path=MyData, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
А вот реализация кнопки обзора, которая не работает (L1 является списком)
private void browse_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog opf = new OpenFileDialog();
opf.ShowDialog();
MyData[L1.SelectedIndex].Title = System.IO.Path.GetFileNameWithoutExtension(opf.FileName);
MyData[L1.SelectedIndex].Command = opf.FileName;
}
Когда я просто набираю текстовые поля и щелкаю из них, он немедленно обновляет список со новой информацией, которую я ввел. У меня также есть кнопка «Создать новую», и после щелчка она сразу добавляет новый элемент в список и обновляет его свойства. Единственное, что не обновляется корректно, это кусок кода, который я дал вам. Спасибо за вашу помощь.
EDIT:
Вот моя реализация INotifyPropertyChanged
private OCLB _MyData;
public OCLB MyData
{
get
{
return _MyData;
}
set
{
_MyData= value;
FirePropertyNotifyChanged("MyData");
}
}
OCLB является наблюдаемой коллекцией. Вот функция FirePropertyNotifyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void FirePropertyNotifyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Каждый из них находится в частичном классе MainWindow для формы wpf. У меня также есть класс для файлов MyData (с 4 функциями get / set), которые хранятся в OCLB (наблюдаемая коллекция). Существует также класс с функциями для OCLB.