2013-03-31 2 views
2

단추의 IsEnabled 속성을 창 CollectionViewSource의 속성에 바인딩하려고합니다. 첫 번째/이전/다음/마지막 버튼을 구현하고 첫 번째 항목에 뷰가있을 때 첫 번째와 이전을 사용하지 않도록 설정합니다.바인딩 단추. CollectionView에서 현재 위치를 사용하도록 설정했습니다.

컬렉션보기 소스를 설정하고 UI 컨트롤을 바인딩했습니다. 코드에서보기에 대한 액세스 권한으로 올바르게 표시되므로 클릭 이벤트 핸들러는보기를 탐색 할 때 잘 작동합니다.

 <CollectionViewSource x:Key="cvMain" /> 

DockPanel은

<DockPanel DataContext="{StaticResource cvMain}"> 

FoJobs가 관찰 모음입니다 윈도우의 루트 요소입니다 cvJobs 내가 버튼의 클릭 핸들러에서 사용하십시오 CollectionView이다

private void Window_Loaded(object sender, RoutedEventArgs e) { 
    ((CollectionViewSource)Resources["cvMain"]).Source = FoJobs; 
    cvJobs = (CollectionView)((CollectionViewSource)Resources["cvMain"]).View; 
} 

내가 가진 이것을 시도했지만 바인딩 오류가 발생합니다. "BindingExpression 경로 오류 : '' '' 'ListCollectionView' '에 속성이 없습니다." "

 <Button Name="cbFirst" Click="cbMove_Click" IsEnabled="{Binding Source={StaticResource cvMain}, Converter={StaticResource CurrPos2BoolConverter}}" /> 

저는 변환기를 먼저 사용하려고 시도하지만 트리거가있는 스타일을보다 효율적으로 지정할 수는 있지만 컬렉션보기에 액세스 할 수 없습니다. 기본 datacontext가 콜렉션 뷰 소스로 설정되어 있지만, 바인딩은 뷰의 소스 (위와 같이 바인딩의 소스를 명시 적으로 설정하지 않으면)로 변환기에 전달되며 통화 속성 (CurrentPosition, Count 등)이 없습니다.

도움을 주시면 감사하겠습니다.

+0

Source 속성을 ElementName으로 변경하십시오. 도움이 될 수 있습니다. – stukselbax

+0

지역에 데이터를 표시하는 위치는 어디입니까? 'DataGrid' 또는 ... –

+0

컬렉션 뷰가 비주얼 트리의 요소가 아닌 윈도우의 리소스에서 선언 될 때 ElementName을 어떻게 사용할 수 있는지 이해하지 못합니다. –

답변

2

MVVM을 사용하지 않는 경우에도 RoutedCommand을 사용하지 않는 이유는 무엇입니까?

<Button x:Name="nextButton" 
     Command="{x:Static local:MainWindow.nextButtonCommand}" 
     Content="Next Button" /> 

및 코드 숨김 귀하의 :

뭔가 같은 말을

public static RoutedCommand nextButtonCommand = new RoutedCommand(); 

public MainWindow() { 
    InitializeComponent(); 
    CommandBinding customCommandBinding = new CommandBinding(
    nextButtonCommand, ExecuteNextButton, CanExecuteNextButton); 
    nextButton.CommandBindings.Add(customCommandBinding); // You can attach it to a top level element if you wish say the window itself 
} 

private void CanExecuteNextButton(object sender, CanExecuteRoutedEventArgs e) { 
    e.CanExecute = /* Set to true or false based on if you want button enabled or not */ 
} 

private void ExecuteNextButton(object sender, ExecutedRoutedEventArgs e) { 
    /* Move code from your next button click handler in here */ 
} 

당신은 수동으로 Button.isEnabled 상태를 다시 평가하는 Explicitly raise CanExecuteChanged()에서 제안 중 하나를 적용 할 수 있습니다.

이 방법은 하나의 영역에있는 버튼과 관련된 논리를 캡슐화합니다.

+0

감사합니다. Viv, 완벽하게 작동했습니다. 나는 커스텀 커맨드 "nextButtonCommand"를 만드는 것보다 ("변경"이 필요할지라도) "LastPage"와 "NextPage"명령을 내장하고있다. CanExecuteChanged()가 버튼이 활성화 된 상태로 작동하도록하려면 아무 것도하지 않아도됩니다. –