选择完成后冻结ListBox项目的选择

时间:2013-10-11 18:55:59

标签: c# wpf mvvm listbox relaycommand

我需要能够“冻结”列表框选择,直到我清除用户对某个项目的选择。
我似乎找不到任何例子,需要在正确的方向上指点一点 我在MVVM中,所以我可能想要触发一个RelayCommand,并且只在SelectedIndex为-1时启用它。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

您可以尝试使用Enable propety,如:

<Listbox Enabled=False />

如果您愿意,可以在代码中使用其他属性绑定此属性。

Property IsListBoxEnable As Boolean
<Listbox Enabled="{Binding IsListBoxEnable, Mode=TwoWay}" />

在您的代码中,您只需修改IsLisBoxEnable的值。

答案 1 :(得分:2)

这样做的一种方法是将IsEnabled数据绑定到SelectedIndex,然后只有当SelectedIndex为-1时才有一个返回true的转换器

<Listbox IsEnabled={Binding RelativeSource={RelativeSource Self}, 
                    Path=SelectedIndex, Converter=YourConverter} />

有关撰写YourConverter的详细信息,请参阅this page

在viewmodel中,您可以拥有SelectedIndex的属性,然后将其设置为-1,并且应该再次启用列表框


如果您不想完全禁用列表框,可以使用datavalidation在某些条件下显示错误消息here is a good place to get started