Я новичок в программировании, и мне трудно понять, как заставить мою ObservableCollection работать с двумя разными списками в двух разных Windows в WPF. Я думаю, что проблема заключается в том, как я реализовал свою коллекцию ObservableCollection, причем основным виновником является эта строка, как показано в классе SoundsWindow:
ViewModel vm = this.DataContext as ViewModel;
Вот как мой список отображает мои элементы, добавленные через:
vm.AddFile(fi.Name, file, 1);
Проблема в том, что это не обновляет другое представление списка в другом окне и ничего не сохраняется.
Вот моя ViewModel:
public class ViewModel : INotifyPropertyChanged
{
public ViewModel()
{
SoundFiles = new ObservableCollection<SoundFile>();
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
private void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
handler(this, new PropertyChangedEventArgs(name));
}
public void AddFile(string fileName, string fileLocation, int groupID)
{
SoundFile soundfile = new SoundFile { FileName = fileName, FileLocation = fileLocation, GroupID = groupID };
SoundFiles.Add(soundfile);
}
private ObservableCollection<SoundFile> soundfiles;
public ObservableCollection<SoundFile> SoundFiles
{
get { return soundfiles; }
set
{
soundfiles = value;
OnPropertyChanged("SoundFiles");
}
}
}
Класс SoundsWindow:
public partial class SoundsWindow : Window
{
public SoundsWindow()
{
InitializeComponent();
this.DataContext = new ViewModel();
}
private void loadFileBtn1_Click(object sender, RoutedEventArgs e)
{
var ofd = new OpenFileDialog();
ofd.Multiselect = true;
ofd.Filter = "MP3 Files (*.mp3)|*.mp3";
var result = ofd.ShowDialog();
if (result == true)
{
ViewModel vm = this.DataContext as ViewModel;
foreach (String file in ofd.FileNames)
{
FileInfo fi = new FileInfo(file);
vm.AddFile(fi.Name, file, 1);
}
}
}
Мой класс SoundFile:
public class SoundFile
{
public string FileName { get; set; }
public string FileLocation { get; set; }
public int GroupID { get; set; }
}
И XAML:
<ListView x:Name="FilesList1" ItemsSource="{Binding SoundFiles}" HorizontalAlignment="Left" Height="379" Margin="10,35,0,0" VerticalAlignment="Top" Width="600">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=FileName}" Width="230"/>
<GridViewColumn Header="Location" DisplayMemberBinding="{Binding Path=FileLocation}" Width="320"/>
<GridViewColumn Header="Group" DisplayMemberBinding="{Binding Path=GroupID}" Width="40"/>
</GridView>
</ListView.View>
</ListView>
В целях тестирования другое окно является копией SoundsWindow, поэтому проблем не должно быть.
Поскольку я почти не знаю, что я делаю, я проверил все, но я почти уверен, что виновником является моя реализация того, как я добавляю и храню вещи в ObservableCollection. Любая помощь будет очень признательна.