У меня проблема с хранением данных в списке.Если я добавляю новые данные, они перезаписывают старые данные, и в списке остается только один элемент.
Вот основной метод, из этого метода я вызываю метод OpenChatScreen, это метод класса ChatScreenManager, где находится корень проблемной.
private void OpenTabChatWindow(string nick)
{
try
{
new System.Threading.Tasks.Task(() =>
{
IDetailData oponent = new DetailData();
oponent = Service.DetailData(Account, nick);
Execute.OnUIThread((System.Action)(() =>
{
//here I call problem method OpenChatScreen method where is the problem,
//it use still the same reference on object opponent
if (ChatScreenManager.OpenChatScreen(true, Account, oponent, Account.DetailData.Info.Nick))
{
AddConversationHistory(nick);
}
}));
}
).Start();
}
catch (Exception exception)
{
MsgBox.ShowException(exception);
}
}
Код из класса ChatScreenManager:
public IDictionary<string,object> ActiveChatScreens { get; set; }
or
public IList<string,> ActiveChatScreens { get; set; }
Проблема такая же, если я использую словарь или список.
public bool OpenChatScreen(bool useTabChat, IAccount account, IDetailData oponent, string avatarNick)
{
if (!ActiveChatScreens.Contains(oponent.Info.Nick))
{
if(useTabChat)
{
//in this method - OpenTabChat is problem
OpenTabChat(account, oponent, avatarNick);
return true;
}
}
return false;
}
private void OpenTabChat(IAccount account, IDetailData oponent, string avatarNick)
{
if (!ChatShellViewModel.IsActive)
{
OpenChatShell();
}
ChatShellViewModel.OpenChatTab(account, oponent, avatarNick);
//here is the root of problem, it use same reference of object opponent
ActiveChatScreens.Add(oponent.Info.Nick);
}
Поэтому я перехожу из метода OpenTabChatWindow объекта типаDetailData и сохраняют свойство строки som в List в другом классе, но используют ту же ссылку на этот объект и перезаписывают данные в списке.
Я пытаюсь создать новое представление объекта:
IDetailData oponent = new DetailData();
oponent = Service.DetailData(Account, nick);
Ипередать этот объект методу задачи, но он не решил его.