2008-08-20 28 views
23

私はかなり古典的なUI状況 - SelectedItemsAvailableItemsという2つのリストボックス - 既に選択したアイテムがSelectedItemsに存在するというアイデアを持っていますが、追加可能なアイテムSelectedItems(つまり、そこにまだ存在しないすべてのアイテム)はAvailableItemsに住んでいます。ListBox.SelectedIndexに応じてWPFのボタンを有効にする

また、<>のボタンを使用して、現在の選択肢をあるリストから別のリストに移動することができます(ダブルクリックに加えて、正常に動作します)。

WPFでは、リストボックスで選択されているものに応じて移動ボタンを有効または無効にするスタイル/トリガを設定できますか? SelectedItemsが左側にあるので、<ボタンは選択したAvailableItemsをそのリストに移動します。ただし、アイテムが選択されていない場合(AvailableItems.SelectedIndex == -1)、このボタンを無効にしたい(IsEnabled == false) - もう一方のリスト/ボタンは逆です。

これはXAMLで直接行うことができますか、それを処理するためにコードビハインドで複雑なロジックを作成する必要がありますか?

+2

もしあなたが楽しいならば、まったく恐ろしい、唯一の方法であることを意味します。正規表現であれば、それは偉大な楽しみですよ。 –

+1

@ウィルゴム槌でナットを叩くのが大好きです。 – Cranston

答えて

42

あなたの解決策は次のとおりです。

<Button Name="btn1" >click me  
    <Button.Style>   
     <Style>    
      <Style.Triggers>     
       <DataTrigger 
        Binding ="{Binding ElementName=list1, Path=SelectedIndex}" 
        Value="-1">      
        <Setter Property="Button.IsEnabled" Value="false"/>      
       </DataTrigger>     
      </Style.Triggers>    
     </Style>   
    </Button.Style>  
</Button> 
66

少ないコードソリューション:

<Button Name="button1" IsEnabled="{Binding ElementName=listBox1, Path=SelectedItems.Count}" /> 

カウントが0である場合はtrueに0、偽>にマップするために思われます。

+0

もう一つの答えは、2つのリストに使うことができます。どちらもボタンを有効にするために何かを選択する必要があります。 – Berty

+0

これは、リストビューに少なくとも1つのアイテムがある場合にのみ表示されます。アイテムが選択されているときは、ボタンが有効になります。 – luka

関連する問題