Ger*_*ton 2 data-binding wpf isenabled
我有一个有2列的网格,第0列的列表框和主网格列1中的辅助网格中的许多其他控件.
如果通过绑定在列表框中选择了某个项目,我希望此控件仅启用(或可能是可见的).我尝试了一个组合框:
IsEnabled="{Binding myList.SelectedIndex}"
Run Code Online (Sandbox Code Playgroud)
但这似乎不起作用.
我错过了什么吗?应该这样的工作吗?
谢谢
你需要一个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所在的命名空间相匹配的那个.