2016-07-26 12 views
0

両方のリストボックスで選択した項目がある場合にボタンを有効にします。私は次のコードしている

<ListBox x:Name="listbox1" HorizontalAlignment="Left" Height="240" Margin="81,80,0,0" VerticalAlignment="Top" Width="321" BorderBrush="#FF6C6C6C" SelectionMode="Single"/> 
<ListBox x:Name="listbox2" HorizontalAlignment="Left" Height="240" Margin="482,80,0,0" VerticalAlignment="Top" Width="318" BorderBrush="#FF6C6C6C" SelectionMode="Multiple"/> 

<Button x:Name="uButton" Content="Upload stuff" HorizontalAlignment="Left" Margin="840,178,0,0" VerticalAlignment="Top" Width="160" Height="46" BorderBrush="#FF6C6C6C" Foreground="#FF0068FF" Click="ButtonClick"> 
    ... 
</Button> 

私は、ユーザーがlistbox1および1またはから1つの項目を選択するまで、ボタンuButtonは、IsEnableが= falseを使用することにより無効にすることにしたいですより多くのアイテムfrom listbox2

どうすればこの問題を解決できますか?

+1

ちょうど 'MultiBinding'を使用これは、このようなものを見ることができます。 ListViewの 'SelectedItem'プロパティの両方にバインドし、配列パラメータ' paramter'のすべての項目がnullでないかどうかをチェックする 'IMultiValueConverter'から派生した単純なコンバータクラスを記述します。 falseかtrueを返します。 – SharpShade

答えて

1

SelectionChanged="ListBox_SelectionChanged"をxamlコードのlistbox1およびlistbox2プロパティに追加します。

あなたは(あなたがWPFでなければならない)、あなたはのICommandを実装する必要がありますし、コマンドにバインドMVVMパターンを使用して提供する、あなたのコード内で、あなたのボタンのプロパティに

private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (listbox1.SelectedItem != null && listbox2.SelectedItems != null) 
      ubutton.IsEnabled = true; 
     else 
      ubutton.IsEnabled = false; 
    } 
+0

バインディングで行うことができるので、これは一番良い方法ではありません。それにもかかわらず、うまく動作します。 – SharpShade

+0

お返事ありがとうございます。全てがうまくいくようですが、 'listbox2.SelectedItems!= null'を' listbox2.SelectedItems.Count> 0'に変更した場合のみ –

+0

私は助けてくれるとうれしいです...ええ、申し訳ありません、XD – Neil

2

IsEnabled="False"を追加ボタンのプロパティ。あなたのボタンのCanExecuteメソッドでは、あなたのリストボックスの選択されたアイテムの数をチェックすることができます。条件が満たされると、自動的にボタンを有効/無効にします。

public class SomeCommand: ICommand 
{ 
    #region Fields 
    MainWindow mainWindow; 
    #endregion 

    #region Constructors and Destructors 
    public SomeCommand(MainWindow mw) 
    { 
     this.mainWindow = mw; 
    } 
    #endregion 

    #region ICommand 
    public event EventHandler CanExecuteChanged 
    { 
     add { CommandManager.RequerySuggested += value; } 
     remove { CommandManager.RequerySuggested -= value; } 
    } 

    public bool CanExecute(object parameter) 
    { 
     return (this.mainWindow.listbox1.SelectedItems.Count != 0 
       && this.mainWindow.listbox2.SelectedItems.Count != 0); 
    } 

    public void Execute(object parameter) 
    { 
     //DO STUFF; 
    } 
    #endregion 
} 

そして、あなたのXAMLで:

<ListBox x:Name="listbox1" HorizontalAlignment="Left" Height="240" Margin="81,80,0,0" VerticalAlignment="Top" Width="321" BorderBrush="#FF6C6C6C" SelectionMode="Single"/> 
    <ListBox x:Name="listbox2" HorizontalAlignment="Left" Height="240" Margin="482,80,0,0" VerticalAlignment="Top" Width="318" BorderBrush="#FF6C6C6C" SelectionMode="Multiple"/> 
    <Button x:Name="uButton" Command="{Binding SomeCommand}" Content="Upload stuff" HorizontalAlignment="Left" Margin="840,178,0,0" VerticalAlignment="Top" Width="160" Height="46" BorderBrush="#FF6C6C6C" Foreground="#FF0068FF" /> 
関連する問題