Я пытаюсь связать GridView с помощью BindingList<T>
в шаблоне MVVM.Winforms MVVM GridView DataBinding
В моем коде, я связать GridView следующим образом:
BindingSource bindingSource = new BindingSource(Context.MyList, null);
bindingSource.CurrentChanged += Context.BindingSourceCurrentItemChanged;
// NOTE: this part is to test if the event is fired...
Context.MyList.ListChanged += myList_ListChanged;
myGrid.DataSource = bindingSource;
У меня есть кнопка добавить, что вызывает метод в контексте как ICommand
:
Context.myCommand.Execute(null);
Наконец, в команде (который находится в классе Контекста), я делаю следующее:
MyList.Add(new Item());
Pret прямое выполнение ... bindingSource.CurrentChanged
срабатывает правильно, но я никогда не вхожу в событие myList_ListChanged
.
Если я остановлюсь на запуске ICommand
и добавлю несколько элементов, счет Context.MyList
действительно будет обновлен. То же самое происходит, если я использую команду delete ...
Есть ли что-то очевидное, я здесь отсутствует ???
Спасибо заранее, Н.
EDIT я понял, что проблема связана с тем, у меня есть MyList как свойство следующим образом:
BindingList<T> myList;
public BindingList<T> MyList {
get {
if (myList == null) { myList = new BindingList<T>();}
return myList;
}
}
Я создаю BindingSource
в конструктор формы, тогда как у меня есть следующий код, который вызывается в ViewModel ПОСЛЕ: переплет производится:
myList = new BindingList<T>
RaisePropertyChanged("MyList");
Я знаю, что это мышление WPF, где это будет легко обновлять привязки данных.
Как я понимаю, BindingSource
, похоже, не воспринимает изменения самого источника данных (то есть указатель на объект), а не изменения его содержимого.
Может ли быть любезным, чтобы подтвердить это поведение? Спасибо! Н.
'Winforms MVVM' - нет такой вещи. Вы ищете WPF. –
считать его «MVC», если вы действительно хотите ... – neggenbe
Возможный дубликат: http://stackoverflow.com/questions/25966963/bindinglist-listchanged-event-not-firing-until-filled-with-data –