ListBox не обновляется на SelectedItems.Add ()

Я пытаюсь привязать список множественного выбора к list<int> (IdProv), который у меня есть. я привязываю SelectedValue к свойству, которое добавляет или удаляет это значение в list<int>. и list<int>, и listbox.SelectedItems должны быть синхронизированы.

Код xaml списка выглядит так:

            <ListBox DisplayMemberPath="Name"
                     SelectedValuePath="Id"
                     SelectedValue="{Binding Path=IdProv,
                                    Mode=OneWayToSource,
                                    ValidatesOnExceptions=True}"
                     SelectionMode="Multiple" />

ItemsSource устанавливается в коде программной части. это список продуктов, у которых есть свойства Id и Name.

проблема заключается в свойстве SelectedValue, которое не обновляется правильно (ни SelectedItem). Они устанавливаются только при выборе первого элемента, но затем обновляются.

также при выборе элемента, щелкнув по списку, SelectedValue просто обновляется, когда я щелкаю элемент, который был добавлен первым.

есть идеи, что происходит? Я уверен, что сделал глупую ошибку в привязках, но это заняло у меня часы, и я не могу этого понять!

спасибо, Мартин


person Martín Coll    schedule 06.03.2011    source источник
comment
У меня есть один вопрос. Вы пытаетесь использовать множественный выбор из списка и хотите привязать его? то есть вам нужен привязываемый множественный выбор в списке   -  person is_this_the_way    schedule 07.03.2011
comment
да. привязать list<int> к SelectedItems напрямую было бы здорово, но я думаю, что это сложнее (потому что я хочу привязать к каждому свойству Id элемента)   -  person Martín Coll    schedule 07.03.2011
comment
Эти ссылки могут помочь. Как я могу обновить элемент списка (C #)? - arstechnica.com/civis/viewtopic.php?f=20&t=554717 Привязать ArrayList к ListBox - http://www.java2s.com/Tutorial/CSharp/0460__GUI-Windows-Forms/BindArrayListtoListBox.htm   -  person Divi    schedule 07.03.2011
comment
привет, спасибо за ответ, но я не нашел там ответа. Я умею делать привязку. моя проблема в том, что SelectedValue обновляется только при первом .SelectedItems.Add () или первом щелчке по списку элементов. если вы нашли что-то, что я пропустил, дайте мне знать!   -  person Martín Coll    schedule 07.03.2011
comment
Эта ссылка обязательно вам поможет. denismorozov.blogspot.in/2010/07/ Спасибо   -  person Leo Moon85    schedule 23.08.2012


Ответы (1)


Я сделал простой хак, который меня не устраивает, но решает проблему. Я написал этот обработчик SelectionChanged, который заботится об установке свойства, которое SelectedValue не обновляет:

    private void idProveedorListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        ListBox list = (ListBox)sender;
        if (list.SelectedItems.Count == 0)
        {
            ProdList.Last().IdProv.Clear();
            return;
        }
        else
        {
            Models.Proveedor lastSelected = list.SelectedItems[list.SelectedItems.Count - 1] as Models.Proveedor;
            if (lastSelected != list.SelectedItem)
                PProdList.Last().IdProveedorInt = lastSelected.Id;
        }
    }
person Martín Coll    schedule 07.03.2011