如果列表框具有选择项,WPF会在其他控件上绑定IsEnabled

Ger*_*ton 2 data-binding wpf isenabled

我有一个有2列的网格,第0列的列表框和主网格列1中的辅助网格中的许多其他控件.

如果通过绑定在列表框中选择了某个项目,我希望此控件仅启用(或可能是可见的).我尝试了一个组合框:

IsEnabled="{Binding myList.SelectedIndex}"
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.

我错过了什么吗?应该这样的工作吗?

谢谢

Jus*_*ill 5

你需要一个ValueConverter这个.本文详细介绍了它,但总结是您需要一个实现IValueConverter的公共类.在Convert()方法中,您可以执行以下操作:

if(!(value is int)) return false;
if(value == -1) return false;
return true;
Run Code Online (Sandbox Code Playgroud)

现在,在您的XAML中,您需要:

<Window.Resources>
    <local:YourValueConverter x:Key="MyValueConverter">
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)

最后,将您的绑定修改为:

IsEnabled="{Binding myList.SelectedIndex, Converter={StaticResource MyValueConverter}"
Run Code Online (Sandbox Code Playgroud)

你确定你不是故意的吗?

IsEnabled="{Binding ElementName=myList, Path=SelectedIndex, Converter={StaticResource MyValueConverter}"
Run Code Online (Sandbox Code Playgroud)

虽然?你不能隐含地将元素的名称放在路径中(除非它Window本身就是DataContext,我猜).绑定到SelectedItem并检查非null也可能更容易,但这实际上只是首选项.

哦,如果你不熟悉备用xmlns声明,请在你的顶部Window添加

xmlns:local=
Run Code Online (Sandbox Code Playgroud)

和VS会提示你各种可能性.您需要找到与您放置的valueconverter所在的命名空间相匹配的那个.