У меня есть ListBox
, который связан с BindingList
. BindingList
создается, когда стороннее приложение вызывает событие. Я вижу, что BindingList
правильно связан ... но ничего не входит в ListBox
. Я использовал ту же логику с некоторыми моими собственными пользовательскими типами и обычно работает очень хорошо.BindingList не обновляется связанный ListBox
Форма класса
private Facade.ControlFacade _controlFacade;
public UavControlForm()
{
InitializeComponent();
_controlFacade = new UavController.Facade.ControlFacade();
UpdateEntityListBox();
}
private void UpdateEntityListBox()
{
lsbEntities.DataSource = _controlFacade.GetEntityTally();
lsbEntities.DisplayMember = "InstanceName";
}
Фасад класса
private Scenario _scenario;
public ControlFacade()
{
_scenario = new Scenario();
}
public BindingList<AgStkObject> GetEntityTally()
{
BindingList<AgStkObject> entityTally = _scenario.EntityTally;
return entityTally;
}
класс Сценарий
private static BindingList<IAgStkObject> _entityTally = new BindingList<AgStkObject>();
public Scenario()
{
if (UtilStk.CheckThatStkIsAvailable())
{
UtilStk.StkRoot.OnStkObjectAdded += new IAgStkObjectRootEvents_OnStkObjectAddedEventHandler(TallyScenarioObjects);
UtilStk.StkRoot.OnStkObjectDeleted += new IAgStkObjectRootEvents_OnStkObjectDeletedEventHandler(TallyScenarioObjects);
}
}
private void TallyScenarioObjects(object sender)
{
List<AgStkObject> tallyOfStkObjects = UtilStk.GetRunningTallyOfAllStkObjects();
List<string> stkObjectNames = UtilStk.GetInstanceNamesOfStkObjects(tallyOfStkObjects);
foreach (string stkObjectName in stkObjectNames)
{
if (!SearchFlightUavTallyByName(stkObjectName))
{
if (!SearchLoiterUavTallyByName(stkObjectName))
{
if (!SearchEntityTallyByName(stkObjectName))
{
int i = stkObjectNames.IndexOf(stkObjectName);
_entityTally.Add(tallyOfStkObjects[i]);
}
}
}
}
}
Я могу видеть е вентиляционный огонь от стороннего приложения - это добавляет сущность к _entityList
по желанию, но noothing добавляется к lsbEntities
- почему?
Спасибо! Я собираюсь попробовать это. Я не уверен, почему - в моем коде - используется другой поток? Я не определяю его явно для использования. Не могли бы вы рассказать мне, почему? – wulfgarpro
Не только ваши примеры помогли мне понять природу потоков в WinForms; Я узнал о пуле потоков, делегатах и обработке событий. Большое вам спасибо за ваше время и усилия. С этой основой я теперь могу получить более полное представление о C# и разработке программного обеспечения в целом. – wulfgarpro
@WulfgarPro - на нескольких типах (возможно, BindingSource?) Есть событие, которое возникает при сбое привязки. Если вы подписаны на это мероприятие, вы можете получить гораздо больше информации об сообщениях об ошибках, которые в противном случае будут тихими. –