Mam ListBox
, który jest powiązany z BindingList
. Model BindingList
jest tworzony, gdy aplikacja innej firmy wywołuje zdarzenie. Widzę, że BindingList
jest prawidłowo związany ... ale nic nie wchodzi do ListBox
. Użyłem tej samej logiki z niektórymi własnymi niestandardowymi typami i zwykle działa bardzo dobrze.BindingList nie aktualizuje związanego listBox
klasy Forma klasy
private Facade.ControlFacade _controlFacade;
public UavControlForm()
{
InitializeComponent();
_controlFacade = new UavController.Facade.ControlFacade();
UpdateEntityListBox();
}
private void UpdateEntityListBox()
{
lsbEntities.DataSource = _controlFacade.GetEntityTally();
lsbEntities.DisplayMember = "InstanceName";
}
Fasada
private Scenario _scenario;
public ControlFacade()
{
_scenario = new Scenario();
}
public BindingList<AgStkObject> GetEntityTally()
{
BindingList<AgStkObject> entityTally = _scenario.EntityTally;
return entityTally;
}
klasy Scenariusz
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]);
}
}
}
}
}
widzę e vent fire z aplikacji innej firmy - to dodaje podmiot do _entityList
zgodnie z życzeniem, ale nic nie jest dodawane do lsbEntities
- dlaczego?
Dzięki! Właśnie chcę to wypróbować. Nie jestem pewien dlaczego - w moim kodzie - używany jest inny wątek? Nie definiuję jednoznacznie do użytku. Czy możesz mi powiedzieć, dlaczego? – wulfgarpro
Nie tylko twoje przykłady pomogły mi zrozumieć naturę wątków w WinFormach; Dowiedziałem się o łączeniu wątków, delegatach i obsłudze zdarzeń. Dziękuję bardzo za poświęcony czas i wysiłek. Dzięki tej podstawie mogę teraz uzyskać szersze zrozumienie C# i rozwoju oprogramowania w ogóle. – wulfgarpro
@WulfgarPro - w przypadku niektórych typów (BindingSource maybe?) Istnieje zdarzenie, które jest wywoływane, gdy powiązanie nie powiedzie się. Jeśli zasubskrybujesz to wydarzenie, możesz uzyskać o wiele więcej informacji na temat komunikatów o błędach, które w przeciwnym razie milczą. –