将选定的项目从列表视图添加到另一个列表视图

时间:2018-12-18 08:58:21

标签: c# json listview

我想将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);
}

2 个答案:

答案 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);
}