【问题标题】:Unable to bind Accordion SelectedIndex to MVVM integer property无法将 Accordion SelectedIndex 绑定到 MVVM 整数属性
【发布时间】:2011-03-31 15:34:36
【问题描述】:

我的 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");
        }
    }
}

在视图中,我有

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

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

【问题讨论】:

  • 答案很简单,不过没时间查,所以写在评论里:{Binding accordion_index, Mode=TwoWay}

标签: wpf mvvm binding toolkit


【解决方案1】:

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

对于 ListBox 或派生自 Selector 的任何控件,SelectedIndex 默认情况下将双向绑定。他们这样做是因为他们在属性元数据中指定了 FrameworkPropertyMetadataOptions.BindsTwoWayByDefault。手风琴不这样做,因此您必须每次都手动进行。

【讨论】:

    猜你喜欢
    • 2011-05-20
    • 2014-09-29
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    相关资源
    最近更新 更多