Невозможно привязать Accordion SelectedIndex к целочисленному свойству MVVM - PullRequest
2 голосов
/ 31 марта 2011

Моя ViewModel должна знать, какой AccordionItem выбран в представлении.Итак, в ViewModel у меня есть:

public class ServerListControlViewModel : ObservableObject
{
    private int _accordion_index;
    public int accordion_index
    {
        get { return _accordion_index; }
        set
        {
            _accordion_index = value;
            RaisePropertyChanged("accordion_index");
        }
    }
}

А в View, у меня есть

<toolkitLayout:Accordion SelectedIndex="{Binding accordion_index}">
  <toolkitLayout:AccordionItem items go here>
</toolkitLayout:Accordion>

Проблема?Accordion выполняет необычную анимацию развертывания / свертывания, но метод set accordion_index никогда не вызывается.Кроме того, я могу установить значение accordion_index в конструкторе виртуальной машины, и при загрузке представления будет вызываться метод get, и будет возвращено мое жестко закодированное значение, но Accorion игнорирует его и всегда по умолчанию использует первый раскрываемый элемент.Зачем?Я новичок в WPF, но уверен, что правильно связал это.

1 Ответ

5 голосов
/ 01 апреля 2011

Как указывал vorrtext, вам нужно добавить Mode=TwoWay к вашему переплету. Accordion происходит от ItemsControl и добавляет свое собственное свойство SelectedIndex.

При использовании ListBox или любого элемента управления, производного от Selector, SelectedIndex будет связываться в двух направлениях по умолчанию. Они делают это, потому что они указывают FrameworkPropertyMetadataOptions.BindsTwoWayByDefault в метаданных свойства. Аккордеон не делает этого, поэтому вам придется делать это каждый раз вручную.

...