无法将Accordion SelectedIndex绑定到MVVM整数属性
问题描述:
我的ViewModel需要知道View中选择了哪个AccordionItem。因此,在视图模型我有:无法将Accordion SelectedIndex绑定到MVVM整数属性
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_index的设置方法永远不会被调用。此外,我可以在虚拟机的构造函数中设置accordion_index,并且在加载视图时将调用get方法,并且我的硬编码值将被返回,但Accorion忽略它并始终默认为第一个被扩展的项目。为什么?我是WPF的新手,但相当肯定我已经正确地绑定了这个。
答
随着vorrtext指出,您需要将Mode=TwoWay
添加到您的绑定。 Accordion从ItemsControl派生并添加它自己的SelectedIndex属性。
使用ListBox或派生自Selector的任何控件,SelectedIndex默认情况下将双向绑定。他们这样做是因为他们在属性元数据中指定了FrameworkPropertyMetadataOptions.BindsTwoWayByDefault。手风琴没有这样做,所以你必须每次手动完成。
答案很简单,但我没有时间检查它,所以我会写在评论中:'{Binding accordion_index,Mode = TwoWay}' – vorrtex 2011-03-31 15:59:57