W ViewModelu utworzyłem Listę
public IList<ConsoleCommand> MessageList { get; private set; } = new ObservableCollection<ConsoleCommand>();
IConsole jest to element obsługujący tą listę i znajduje się w Modelu kontrolki.
public partial class MyConsole : UserControl, IConsole
{
public MyConsole()
{
InitializeComponent();
ViewModel = hViewModel;
}
MyConsoleViewModel ViewModel ;
public bool Add(ConsoleCommand Source, IConsoleMessage[] Messages)
{
if (Source == null)
return false;
bool ret = false;
Dispatcher?.Invoke(() =>
{
ConsoleCommand cmd = ViewModel.MessageList.FirstOrDefault(x => x.ID == Source.ID);
if (cmd != null)
{
ret = true;
foreach(IConsoleMessage m in Messages)
{
IConsoleMessage newMessage = m.Copy();
cmd.Add(newMessage );
}
}
});
return ret;
}
Problem leży w tym, że nie mogę zmieniać zawartości obiektów po dodaniu ich do listy z poziomu wywołanego eventu z metody asynchronicznej.
Obiekt ConsoleCommand wygląda tak: https://pastebin.com/2tnQpMys
Obiekt ConsoleMessage wygląda tak: https://pastebin.com/Cf0d4MTG
Otrzymuję następujący wyjątek:
Cała zasada działania wygląda mniej więcej tak:
- W MainWindow tworzę nowy obiekt ConsoleCommand i przekazuję go do metody asynchronicznej.
- Metoda asynchroniczna tworzy swoją własną listę ConsoleMessage oraz tworzy tam kilka obiektów
- Metoda asynchroniczna wywołuje Event i w argumentach przekazuje ConsoleCommand oraz ConsoleMessage[]
- Event odbiera MainWindow i używając Dispatcher.Invoke() wywołuje metodę MyConsole.Add() z tymi dwoma parametrami.
- Otrzymuję wyjątek w momencie
Proszę o wskazanie mi prawidłowego toku myślenia jak szukać rozwiązania