BindingList
にバインドされているListBox
があります。 BindingList
は、サードパーティのアプリケーションがイベントを発生させたときに構築されます。 BindingList
が正しくバインドされていますが、ListBox
は何も入力されません。私は自分のカスタムタイプのいくつかとまったく同じロジックを使用していますが、通常はとてもうまく動作します。BindingListがバインディングリストボックスを更新しない
Formクラス
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
にエンティティが追加されますが、lsbEntities
には何も追加されません - なぜですか?
ありがとう!私はこれを試してみようとしています。なぜ私のコードでは別のスレッドが使用されているのか分かりません。私は明示的に使用することを定義していません。理由を教えてください。 – wulfgarpro
WinFormsのスレッドの性質を理解してくれただけでなく、スレッドプーリング、デリゲート、イベントハンドリングについて学習しました。あなたの時間と労力をどうもありがとう。これにより、C#と一般的なソフトウェア開発の幅広い理解を得ることができます。 – wulfgarpro
@ WulfgarPro - いくつかの型(BindingSourceかもしれない?)には、バインディングが失敗したときに発生するイベントがあります。このイベントを購読すると、そうでなければサイレントなエラーメッセージに関する多くの情報を得ることができます。 –