2010-03-02 8 views
0

말 나는 각 listboxitems는 "상태"라는 멤버 클래스의 개체에 바인딩되어, 이제WPF ListBoxItem의 선택

<Grid> 
    <Grid.ColumnDefinition> 
     <!--2 Columns are defined--> 
    </Grid.ColumnDefinition> 

    <Button x:Name="button" Grid.Column="1"/> 
    <ListBox x:Name="listBox" Grid.Column="2"/> 

    </Grid> 

아래로 WPF XAML 코드를 가지고있다. 항목이 선택 될 때마다 Status는 "0"이됩니다. 선택하지 않은 상태가 "1"이되면.

이제는 "상태"항목 중 하나가 "0"또는 "1"이 될 때마다 단추를 (XAML에서) 해제/활성화 할 수 있습니다. DataTriggers을 통해이 작업을 수행

감사 할 수있는 방법

답변

1

이 코드의 위치에 따라 다릅니다. DataTemplate 또는 ControlTemplate 내부에 있으면 DataTrigger를 사용할 수 있습니다. 그렇지 않은 경우 (또는있는 경우에도) 직접 바인딩을 사용하여 동일한 효과를 얻을 수 있어야합니다. 두 경우 모두 동일한 기본 방법을 사용할 수 있습니다. ListBox의 아이템 (데이터 객체 컬렉션)을 가져 와서 Status 값에 기반한 부울 값을 출력하는 IValueConverter를 만들면 버튼의 IsEnabled를 바인딩하거나 DataTrigger의 값을 확인하고 필요에 따라 비활성화 할 수 있습니다.

선택/선택 해제라고 말하면 ListBox 선택을 말하는 경우 상태 값 자체를 볼 필요조차 없습니다. 템플릿 내부에 있다면 당신은 또한 단지 목록 상자가 선택한 항목이 있는지 여부를 확인할 수 있습니다 (트리거를 사용할 수 있습니다) :

<DataTrigger Binding="{Binding ElementName=listBox, Path=SelectedItems.Count}" Value="0"> 
    <Setter TargetName="button" Property="IsEnabled" Value="False" /> 
</DataTrigger> 
+0

문제는 SelectedItems.Count 속성을 사용할 수 없다는 것입니다. 그 이유는, 필자의 경우 listBox 데이터 템플릿은 Select/Unselect 기능 (어떤 Listbox 선택 항목도 제공하지 않음)을위한 ToggleButton을 제공하기 때문입니다. 토글 버튼은 "상태"에 바인딩됩니다 그래서 DataTrigger를 통해 ListBox의 datatemplate 섹션에서 형제 요소 (이 경우 버튼)에 액세스 할 수 있습니까? 그리고 valueconverter 사용에 관한 질문. 단추의 Datacontext를 listbox.Items로 설정하고 변환기와 함께 바인딩하겠습니까? – SysAdmin

0

당신이 Selection_Changed 이벤트 핸들러를 사용 할 수 있습니까?

0

그냥 값이 Ardman 1 때 버튼을 활성화하는 해당 트리거를 확인해야을, Selection_Changed 이벤트 핸들러를 사용할 수는 있지만 가능한 한 XAML에서 많은 작업을 수행하고 UI 변경 사항은 코드 뒤에 남겨 둡니다. 때로는 작동하지만, 지금은 그렇지 않습니다.

코리