これには が必要です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 にバインドして null でないことを確認する方が簡単かもしれませんが、それは単なる好みです。
xmlns
ああ、代替宣言に慣れていない場合は、 の先頭Window
に追加してください
xmlns:local=
VS はさまざまな可能性を要求します。作成した valueconverter を配置した名前空間に一致するものを見つける必要があります。