Вам понадобится ValueConverter
для этого. Эта статья описывает ее подробно, но вкратце вам нужен открытый класс, который реализует IValueConverter. В методе Convert () вы можете сделать что-то вроде этого:
if(!(value is int)) return false;
if(value == -1) return false;
return true;
Теперь в вашем XAML вам нужно сделать:
<Window.Resources>
<local:YourValueConverter x:Key="MyValueConverter">
</Window.Resources>
И, наконец, измените привязку на:
IsEnabled="{Binding myList.SelectedIndex, Converter={StaticResource MyValueConverter}"
Вы уверены, что не имели в виду
IsEnabled="{Binding ElementName=myList, Path=SelectedIndex, Converter={StaticResource MyValueConverter}"
хотя? Вы не можете неявно поместить имя элемента в путь (если, конечно, Window
не является DataContext
). Также может быть проще связать с SelectedItem и проверить, не является ли оно пустым, но это действительно просто предпочтение.
Да, и если вы не знакомы с альтернативными xmlns
объявлениями, в верхней части вашего Window
добавьте
xmlns:local=
и VS подскажет вам различные возможности. Вам нужно найти тот, который соответствует пространству имен, в которое вы поместили конвертер значений, в который вы сделали.