我的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的新手,但相当肯定我已经正确绑定了它。
答案 0 :(得分:5)
正如vorrtext指出的那样,您需要将Mode=TwoWay
添加到绑定中。 Accordion派生自ItemsControl并添加它自己的SelectedIndex属性。
使用ListBox或从Selector派生的任何控件,SelectedIndex将默认绑定双向。他们这样做是因为他们在属性元数据中指定了FrameworkPropertyMetadataOptions.BindsTwoWayByDefault。手风琴不会这样做,所以你必须每次都手动完成。