목록 데이터를 저장하는 데 문제가 있습니다. 새 데이터를 추가하면 이전 데이터가 다시 쓰여지고 목록에는 여전히 하나의 항목 만 있습니다.목록의 원하지 않는 다시 쓰기 데이터
이 메소드의 기본 메소드는 OpenChatScreen 메소드입니다. ChatScreenManager 클래스의 메소드는 problen의 루트입니다. 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);
}
}
코드 : I 사전 또는 목록을 사용하는 경우
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);
}
그래서 나는 다른 클래스의 목록에 DetailData의 방법 OpenTabChatWindow 객체 유형 및 저장 솜 문자열 속성에서 통과하지만,이 객체에 동일한 기준을 사용하여 목록에있는 데이터를 다시 작성합니다.
나는 개체의 새 insatce 만들려고 :
IDetailData oponent = new DetailData();
oponent = Service.DetailData(Account, nick);
을 그리고 문제 방법이 개체를 전달하지만, 그것을 해결하지 않았다.
ActiveChatScreens는 어떤 데이터 유형입니까? –
Sory, 내 실수, 내 질문을 편집했습니다. 그것은 목록이거나 사전 일 수도 있습니다. 문제는 동일합니다. 나는 상대방을 저장합니다. 정보. 닉을 콜렉션에 저장하십시오. 그러나 대상 상대에게 동일한 참조를 사용하고 목록의 항목을 다시 작성합니다. –
사전에서 동일한 참조를 사용하면 이전 내용을 덮어 써야합니다. 새 메시지를 추가하려는 경우 messageid를 키로 사용해야하며 포함 된 개체에는 who 및 what에 대한 속성이 있어야합니다. 이 경우입니까, 아니면 새 채팅 창을 열려고하는 것입니까? 그런 다음 덮어 쓰는 것이 왜 문제입니까? –