这就是我所拥有的:
public class ViewModel
{
public BindingList<Row> Rows { get; set; }
public BindingList<MyElement> Selectables { get; set; }
}
public class Row
{
public MyElement Selected { get; set; }
}
public class MyElement
{
public string Value { get; set; }
public string Friendly { get; set; }
}
这就是我想要的:一个XtraGrid
在每个单元格中都有一个组合框编辑器的列。对于不同的行,下拉选项的值是不同的。具体来说,可用选项是 的子集ViewModel.Selectables
,该子集由运行时的业务规则定义。
这就是我尝试实现这一点的方式:
我创造了三个BindingSources
viewModelBindingSource
: 和DataSource = ViewModel
rowsBindingSource
:DataSource = viewModelBindingSource
与DataMember = Rows
selectablesBindingSource
与DataSource = viewModelBindingSource
_DataMember = Selectables
我将网格设置DataSource
为rowsBindingSource
. 我为网格中的 LookupEdit 创建了一个就地编辑器存储库。我将repositoryItemLookUpEdit
's设置DataSource
为selecteablesBindingSource
我将 's 设置repositoryItemLookUpEdit
为列的ColumnEdit
值
我连接到 gridViewsShownEditor
事件:
this.gridView1.ShownEditor += gridView1_ShownEditor;
在gridView1_ShownEditor(object sender, EventArgs e)
方法中,我可以引用视图,这样我就可以执行以下操作:
GridView view = sender as GridView;
var newSelectables = new BindingList<MyElement>();
// businesslogic to populate newSelectables ...
var bs = new BindingSource(newSelectables, "");
edit = (LookUpEdit)view.ActiveEditor;
edit.Properties.DataSource = bs;
这适用于我在单击的组合框中获得新选项,并选择该选项将值设置为绑定对象,即Row.Selected
.
现在我的问题是,当单元格失去焦点时,单元格内容变为空白。
这似乎是由于我BindingSource
用 new 创建了一个 new 的事实,因为如果我省略了这个更改,DataSource
那么将ViewModel.Selectables
使用 in 的值,并且它按预期工作。
那么,有谁知道为什么在这种情况下单元格中显示的文本在失去焦点后变为空白?