3

2 列のグリッド、列 0 のリストボックス、およびメイン グリッドの列 1 のセカンダリ グリッドにあるその他の多数のコントロールがあります。

バインドによってリストボックスで項目が選択されている場合にのみ、このコントロールを有効にする (または表示する) ようにします。コンボボックスを試しました:

IsEnabled="{Binding myList.SelectedIndex}"

しかし、それはうまくいかないようです。

何か不足していますか?このようなものが機能する必要がありますか?

ありがとう

4

3 に答える 3

6

これには が必要です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 を配置した名前空間に一致するものを見つける必要があります。

于 2010-06-01T20:55:36.487 に答える
2

コピー&ペースト ソリューション:

このクラスをコードに追加します。

public class HasSelectedItemConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value is int && ((int) value != -1);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

<Application.Resources>セクションの App.xml にコンバーターを StaticResource として追加します。

<local:HasSelectedItemConverter x:Key="HasSelectedItemConverter" />

これで、XAML で使用できるようになりました。

<Button IsEnabled="{Binding ElementName=listView1, Path=SelectedIndex,
 Converter={StaticResource HasSelectedItemConverter}"/>
于 2016-08-27T11:56:11.163 に答える
0

うーん、おそらくすべてのインデックス > 0 を明示的に true に変換する BindingConverter で動作します。

于 2010-06-01T20:52:14.453 に答える