BindingList和ListBox行为

时间:2011-01-26 01:21:27

标签: c# winforms data-binding listbox

我有一个绑定到BindingList集合的ListBox。这非常有效。

当第一件商品进入收藏品时,我唯一的悲痛就发生了。 ListBox的默认行为是选择该项 - 但是,这不会引发SelectedIndexChanged事件。我假设这是因为SelectedIndex最初设置为null;在变为空的时候,索引实际上没有改变;相当分配。如何停止选择(突出显示)添加到ListBox的第一个初始项的默认行为?

如果我的假设是错误的,请解释一下?

更新

到目前为止,这是我的代码的核心部分。

    public UavControlForm()
    {
        InitializeComponent();
        _controlFacade = new UavController.Facade.ControlFacade();
        UpdateFlightUavListBox();
    }

    private void UpdateFlightUavListBox()
    {
        lsbFlightUavs.DataSource = _controlFacade.GetFlightUavTally();
        lsbFlightUavs.DisplayMember = "Name";
    }

    private static BindingList<FlightUav> _flightUavTally = new BindingList<FlightUav>();
    public BindingList<FlightUav> FlightUavTally
    {
        get { return _flightUavTally; }
    }

    public void AddFlightUav(double[] latLonAndAlt)
    {
        FlightUav flightUav = new FlightUav();
        flightUav.Latitude = latLonAndAlt[0];
        flightUav.Longitude = latLonAndAlt[1];
        flightUav.Altitude = latLonAndAlt[2];
        _flightUavTally.Add(flightUav);

        UtilStk.InjectAircraftIntoStk(flightUav.Name);
        flightUav.SetFlightDefaults();
        PlayScenario();
    }

更新

因此,设置lsbFlightUavs.SelectedIndex = -1可以解决问题。上面的方法AddFlightUav()是从主窗体的第二种形式的按钮的OnClick处理程序中调用的。当lsbFlightUavs.SelectedIndex = -1方法返回时,如何从第二个表单中调用AddFlightUav()?我知道我可以使ListBox静态,但这对我来说似乎是不好的做法..什么是更优雅的解决方案?

1 个答案:

答案 0 :(得分:0)

使用WinForms,我实现了Singleton模式。这使我能够从我的第二个表单访问ListBox控件。

表单1

private static UavControlForm _instance = new UavControlForm();
private UavControlForm()
{
    InitializeComponent();   
}
public static UavControlForm Instance
{
    get { return _instance; }
}
public ListBox FlightUavListBox
{
    get { return lsbFlightUavs; }
}

表格2

UavControlForm.Instance.FlightUavListBox.SelectedIndex = -1;