2010-06-01 2 views
2

두 개의 열이있는 눈금, 0 열의 목록 상자 및 주 눈금 열 1의 보조 눈금에있는 여러 컨트롤이 있습니다.목록 상자에 선택 항목이있는 경우 다른 컨트롤에서 WPF 바인딩 IsEnabled

바인딩을 통해 목록 상자에서 항목을 선택한 경우에만이 컨트롤을 활성화하거나 표시 할 수 있습니다. 콤보 상자에서 시도 :

IsEnabled="{Binding myList.SelectedIndex}" 

하지만 작동하지 않는 것 같습니다.

내가 누락 된 항목이 있습니까? 이 작품이 좋아야합니까?

감사

답변

0

흠, 아마도 그것은 사실에 명시 적으로 모든 인덱스> 0을 변환하는 BindingConverter, 작동합니다.

+0

인덱스는 0이지만 ListBox에도 유효합니다. > -1 인 경우 true를해야합니다. – JustABill

+0

아, 네 말이 맞다. 내 잘못이야, 고마워. – DHN

5

이 경우 ValueConverter이 필요합니다. This article에 자세히 설명되어 있지만 요약하면 IValueConverter를 구현하는 공용 클래스가 필요합니다. 변환() 메소드에서, 당신이 뭔가를 할 수 있습니다 :

<Window.Resources> 
    <local:YourValueConverter x:Key="MyValueConverter"> 
</Window.Resources> 

을 그리고 마지막으로, 당신의 바인딩 수정 :

if(!(value is int)) return false; 
if(value == -1) return false; 
return true; 

지금, 당신의 XAML에서, 당신이해야 할

IsEnabled="{Binding myList.SelectedIndex, Converter={StaticResource MyValueConverter}" 
당신은 당신이 말은하지 않았다 있습니까

IsEnabled="{Binding ElementName=myList, Path=SelectedIndex, Converter={StaticResource MyValueConverter}" 

그래도? 요소 이름을 암시 적으로 경로에 넣을 수는 없습니다 (Window 자체가 DataContext 인 경우 제외). 또한 SelectedItem에 바인딩하고 null이 아닌지 확인하는 것이 더 쉬울 수도 있지만 실제로는 단지 기본 설정입니다. 당신이 당신의 Window의 상단에, 다른 xmlns 선언에 익숙하지 않은 경우

아, 그리고,

xmlns:local= 

와 VS는 다양한 가능성을 묻는 메시지가 표시됩니다 추가 할 수 있습니다. 당신은 당신이 당신이 만든 valueconverter를 넣어 공간을 일치 하나를 찾을 필요가

0

복사 - 붙여 넣기 솔루션 :.

이 코드에이 클래스를 추가

public class HasSelectedItemConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value is int && ((int) value != -1); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

는에 정적 리소스로 변환 추가 <Application.Resources> 섹션에서 App.xml :

<local:HasSelectedItemConverter x:Key="HasSelectedItemConverter" /> 

그리고 지금 당신은 당신의 XAML에서 사용할 수 있습니다 :

<Button IsEnabled="{Binding ElementName=listView1, Path=SelectedIndex, 
Converter={StaticResource HasSelectedItemConverter}"/>