我有一个Dictionary<string, ValuePair>
,其中包含有关我的checkedlistbox控件的先前状态的信息。我想尝试迭代该词典并调整我当前的checkedlistbox来反映这一点。 Dictionary中包含的信息是一个Name作为字符串,它匹配列表框中的项目,因此我可以使用它来调用FindStringExact()
,然后ValuePair类包含一个bool值,用于检查该项是否被检查,以及一个整数是该项目之前在列表中的位置的索引值。
如何从该信息中重新设置checkedlistbox?我需要提一下,我的列表框通过DataSource属性绑定到inputData.Cameras
自定义类对象列表。这是我设置检查状态的尝试,但是我无法解决如何设置顺序,因为我需要编辑控件绑定的源列表:< / p>
foreach (KeyValuePair<string, ValuePair> item in presets.JumpCameras)
{
int index1 = lbCameras.FindStringExact(item.Key);
if (index1 != -1)
{
UnifyCamera camera = lbCameras.Items[index1] as UnifyCamera;
lbCameras.SetItemCheckState(index1, item.Value.Value1 == true ? CheckState.Checked : CheckState.Unchecked);
}
}
我的ValuePair类:
public struct ValuePair
{
public bool Value1;
public int Value2;
public ValuePair(bool x, int y)
{
Value1 = x;
Value2 = y;
}
}
可以访问inputData.Cameras
并返回List<UnifyCamera>
UnifyCamera.Name
,其中var c = document.getElementById('test'), ctx = c.getContext('2d');
ctx.fillStyle = "rgba(0,0,255,0.5)";
ctx.beginPath();
ctx.moveTo(25, 0);
ctx.lineTo(50, 50);
ctx.lineTo(0, 50);
ctx.lineTo(25, 0);
ctx.fill();
ctx.fillStyle = "rgba(255,0,0,0.5)";
ctx.beginPath();
ctx.moveTo(50, 0);
ctx.lineTo(75, 50);
ctx.lineTo(25, 50);
ctx.lineTo(50, 0);
ctx.fill();
将匹配/不会在当前控件中不存在来自字典。
答案 0 :(得分:0)
所以我采用了一点蛮力方法,将任务分成两部分。首先,我重新创建了一个源列表顺序,并重新绑定了我的列表框以进行刷新。然后我为列表中的项目设置所有检查状态。好奇如果有更有效的方法来做到这一点:
// modify source list order
for (int i = 0; i < lbCameras.Items.Count; i++)
{
UnifyCamera cam = lbCameras.Items[i] as UnifyCamera;
if (presets.JumpCameras.ContainsKey(cam.Name))
{
this.inputData.Cameras.Remove(cam);
this.inputData.Cameras.Insert(presets.JumpCameras[cam.Name].Index, cam);
}
}
// re-set the list box bounding to re-set the order.
((ListBox)lbCameras).DataSource = null;
((ListBox)lbCameras).DataSource = this.inputData.Cameras;
((ListBox)lbCameras).DisplayMember = "Name";
// set check boxes
foreach (KeyValuePair<string, ValuePair> item in presets.JumpCameras)
{
int index1 = lbCameras.FindStringExact(item.Key);
if (index1 != -1)
{
lbCameras.SetItemCheckState(index1, item.Value.Checked == true ? CheckState.Checked : CheckState.Unchecked);
}
}