2011-03-07 2 views
0

속성이있는 단추를 만들려고합니다. IsEnabled = true는 목록 상자에 하나의 항목 만 있습니다. listbox가 button 속성 인 isEbabled보다 항목이 없으면 'false'여야합니다. 그것을 성취하기위한 최선의 방법이 무엇인지 찾아 내고 싶습니다. 나는 listboxitems를 동적으로 삭제하고있다. 어떤 아이디어든지 높게 평가됩니다! WPF에서listbox에 내용이있는 경우 IsEnabled를 기반으로 buttons 속성을 설정하는 방법은 무엇입니까?

<ListBox x:Name="ListBox" SelectionMode="Multiple" Height="100" /> 
<Button x:Name="btnNext" Style="{StaticResource AVV_ButtonStyle}" Content="NextButton" IsEnabled="False" /> 

답변

2

:

<ListBox x:Name="ListBox" SelectionMode="Multiple" Height="100" /> 
<Button x:Name="btnNext" Style="{StaticResource AVV_ButtonStyle}" Content="NextButton" IsEnabled="{Binding ElementName=ListBox,Path=HasItems" /> 

,이 같은 반환 당신이 당신의 DataContext에이 부울 속성에 바인딩을 이동해야하므로 실버 라이트는 ItemsControl에에 HasItems을 지원하지 않습니다

return list.Count > 0 

List가 바인딩 된 컬렉션에서 CollectionChanged 이벤트를 구독하고 IsEnabled 속성이 bou 인 부울 속성에 대해 PropertyChanged 이벤트를 발생시킵니다. 바인딩이 강제로 소스를 다시 읽도록합니다.

단추를 명령에 바인딩 한 경우 Silverlight의 명령 구현이 WPF와 다르더라도 명령의 CanExecute 속성을 통해이 작업을 수행 할 수 있습니다.

+0

내 스레드를 살펴 줘서 고맙습니다. 네가 일하는 샘플이 있는지 궁금해했다. 나는 Silverlight로 만들려고했으나 아직 성공하지는 못했다. – vladc77

+0

WPF에서만 작동하는 첫 번째 코드 샘플을 무시하고 나머지는 Silverlight로 시도해보십시오. – benPearce

0

단추에 명령을 사용할 수 있습니다. 그런 다음 명령에 대해 CanExecute 메서드를 지정할 수 있습니다. 그러면 버튼이 활성화/비활성화됩니다. 그런 다음 ListBox의 소스가 변경 될 때마다 CanExecute 값을 다시 확인하면됩니다. 비슷한 코드 사용 :

 (this as INotifyPropertyChanged).PropertyChanged += (s, e) => 
     { 
      (YourCommand as DelegateCommand).RaiseCanExecuteChanged(); 
     }; 
관련 문제