无法将Accordion SelectedIndex绑定到MVVM整数属性

时间:2011-03-31 15:34:36

标签: wpf mvvm binding toolkit

我的ViewModel需要知道在View中选择了哪个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");
        }
    }
}

在视图中,我有

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

问题? Accordion执行花哨的展开/折叠动画,但是accordion_index的set方法永远不会被调用。此外,我可以在VM的构造函数中设置accordion_index,并且在加载View时将调用get方法,并且将返回我的硬编码值,但Accorion会忽略它并且始终默认为要扩展的第一个项目。为什么?我是WPF的新手,但相当肯定我已经正确绑定了它。

1 个答案:

答案 0 :(得分:5)

正如vorrtext指出的那样,您需要将Mode=TwoWay添加到绑定中。 Accordion派生自ItemsControl并添加它自己的SelectedIndex属性。

使用ListBox或从Selector派生的任何控件,SelectedIndex将默认绑定双向。他们这样做是因为他们在属性元数据中指定了FrameworkPropertyMetadataOptions.BindsTwoWayByDefault。手风琴不会这样做,所以你必须每次都手动完成。