在使用Devexpress的TreeList控件时,通过将数据BindingList设置为DataSource实现数据绑定。完成绑定后修改界面值数据源也跟随改变。问题是当修改TreeList中行的顺序时(比如上下移动某行)数据源不跟随变化。
代码大致如下(由于用List当作数据源时连新增行这种操作都无法在界面同步因此用的BindingList):
public BindingList<MyClass> datas = new BindingList<MyClass>();
public Form1()
{
InitializeComponent();
treeList1.DataSource = datas;
}
private void PrintBtn_Click(object sender, EventArgs e)
{
foreach(MyClass myClass in datas)
{
Console.WriteLine(myClass.Name);
}
}
public class MyClass
{
public string Name { get; set; }
public string Other { get; set; }
public string ID { get; set; }
public string ParentID { get; set; }
}
以下是改变顺序前后对数据源打印的结果:
我尝试在数据移动时通过获取选中行和放置行ID来获取MyClass对象从而直接在datas中去改变数据源的顺序以达到改变顺序的效果(即改变BindingList中元素顺序)。但是用这种方法会产生一个问题,当存在子项时采用第三变量去改变BindingList顺序时会报错(个人分析原因应该是由于绑定TreeList后当出现重复ID字段时子项ParentID不知道出现重复指向造成的)。
想请教一下有没有直接连数据源顺序也能跟随界面去改变的绑定方式呢??
public class DataTreeNode
{
private string id;
private string parentId;
private string nodeText;
public string Id
{
get { return id; }
set { id = value; }
}
public string ParentId
{
get { return parentId; }
set { parentId = value; }
}
public string NodeText
{
get { return nodeText; }
set { nodeText = value; }
}
}
MVVM 应该可以满足你的需求