Это то, что у меня есть:
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
, подмножество определяется businessrules во время выполнения.
Вот как я пытаюсь это сделать:
Я создаютри BindingSources
viewModelBindingSource
: с DataSource = ViewModel
rowsBindingSource
: с DataSource = viewModelBindingSource
И DataMember = Rows
selectablesBindingSource
с DataSource = viewModelBindingSource
И DataMember = Selectables
Я установил для сетки DataSource
значение rowsBindingSource
.Я создаю хранилище редактора на месте для LookupEdit в сетке.Я установил repositoryItemLookUpEdit
DataSource
на selecteablesBindingSource
Я установил repositoryItemLookUpEdit
как ColumnEdit
значение столбца
Я подключаюсь к gridViews ShownEditor
событие:
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
с новым, потому чтоесли я пропускаю это изменение DataSource
, тогда вместо него используются значения в ViewModel.Selectables
, и оно работает как положено.
Итак, кто-нибудь знает, почему текст, отображаемый в ячейкегаснет после потери фокуса в этом случае ??