2016-07-26 4 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와 하나에서 하나 개의 항목을 선택할 때까지 버튼 uButton이 IsEnable은 = false를 사용하여 비활성화 할 listbox2의 항목을 더보세요.

어떻게하면됩니까?

+1

그냥'MultiBinding'을 사용하여 다음과 같이 보일 수 있습니다. ListView의'SelectedItem' 프로퍼티 둘 모두에 바인딩하고 배열 매개 변수'paramter'의 모든 항목이 null이 아닌지 검사하는'IMultiValueConverter'에서 파생되는 간단한 변환기 클래스를 작성하십시오. false 또는 true를 반환합니다. – SharpShade

답변

1

SelectionChanged="ListBox_SelectionChanged"을 xaml 코드의 listbox1 및 listbox2 속성에 추가하십시오.

당신이 (이 당신이 WPF 인다)이 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

다행 이네 ... 죄송합니다. – Neil

2

에서 버튼의 속성을 다음

을에 IsEnabled="False"를 추가, 당신은 ICommand의를 구현하고 명령에 바인딩한다 버튼의 속성입니다. 단추의 CanExecute 메서드에서 ListBox의 선택한 항목 수를 확인할 수 있습니다. 기준이 충족되면 자동으로 버튼을 활성화/비활성화합니다.

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" />