我想将SelectedItem
中所有已处理的ListView A
添加到ListView B
作为一种历史。
如果我仅对一个对象进行编码,那是可行的,但是当我尝试向ListView B
添加另一个对象时,它什么也没显示。我知道我必须将其反序列化为List<obj>
,但是它不起作用。你能帮我吗?
这是我到目前为止尝试过的:
// ListView A (Source)
// the ItemSelected is processed this function is called
public void AddToHistory(Object obj)
{
string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "history.txt");
var content = JsonConvert.SerializeObject(obj);
File.WriteAllText(fileName, content);
}
// ListView B (Destination View)
void CreateListOfObjects()
{
ObjectList = new List<Object>();
string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "history.txt");
var content = File.ReadAllText(fileName);
var json = JsonConvert.DeserializeObject<Object>(content);
ObjectList.Add(json);
}
private List<Object> _object;
public List<Object> ObjectList
{
get => _object;
set => SetValue(ref _object, value);
}
答案 0 :(得分:0)
尝试使用File.AppendAllText而不是File.WriteAllText,因为WriteAllText会在写入时覆盖现有文件。
public void CreateListOfObjects()
{
string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "history.txt");
var content = File.ReadAllText(fileName);
var itemList = JsonConvert.DeserializeObject<List<string>>(content);
foreach(var item in itemList)
{
listView2.Items.Add(item);
}
}
答案 1 :(得分:0)
我终于找到了解决方法。 现在,我首先使用List来为对象数组提供包装器。
// ListView A (Source)
// when ItemSelected is processed this function is called
public void AddToHistory(Object obj)
{
string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "history.txt");
var _tempList = new List<Object>();
if (File.Exist(fileName)
{
var _tempContent = File.ReadAllText(fileName);
var json = JsonConvert.DeserializeObject<List<Object>>(tempContent);
_tempList.AddRange(json);
_tempList.Add(obj);
} else
{
_tempList.Add(obj);
}
var content = JsonConvert.SerializeObject(_tempList);
File.WriteAllText(fileName, content);
}
// ListView B (Destination View)
void CreateListOfObjects()
{
ObjectList = new List<Object>();
string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "history.txt");
var content = File.ReadAllText(fileName);
var json = JsonConvert.DeserializeObject<List<Object>>(content);
ObjectList.AddRange(json);
}