2012-03-13 3 views
1

확인란의 IsChecked 속성을 사용자 지정 메서드에 바인딩 할 수 있습니까?메서드에 CheckBox를 바인딩 할 때 CheckBox를

개체 컬렉션에 바인딩 된 확인란 목록을 만들었습니다. 나는 첫 번째 집합의 하위 집합 인 개체의 두 번째 컬렉션을 가진다.

<ListBox Height="auto" HorizontalAlignment="Stretch" Name="listBox" VerticalAlignment="Stretch" Width="auto" ItemsSource="{Binding DataSources}"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <CheckBox Name="CheckBoxZone" 
           Content="{Binding Name}" 
           Tag="{Binding Id}" 
           Margin="0,5,0,0" 

           /> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
+0

MVVM이 아닌 경우 [선택한 이벤트.] (http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.togglebutton.checked.aspx)를 사용하십시오. – Will

+0

중간에 ViewModel 클래스가 있습니다. 내 계획은 Checked 이벤트를 사용하여 DB의 데이터를 수정하는 것입니다. 그에 따라 체크 된 항목을 나열하는 방법을 알 수 없습니다. – Omar

+0

CheckBox는 두 번째 (하위 집합) 컬렉션에 대한 액세스 권한이있는 DataTemplate에 있습니까? – Clemens

답변

3

당신은에있는 확인란의 명령 속성을 바인딩 할 수 있습니다 : 나는 객체가 두 번째 목록에 포함 여부를

편집 여부를 결정하는 방법에 체크 박스의의 IsChecked porperty을 결합하고 싶습니다 모델에 대한 ICommand. 즉, 점검이 변경 될 때마다 명령이 호출됩니다.

예 :

<CheckBox Name="CheckBoxZone" 
          Content="{Binding Name}" 
          Tag="{Binding Id}" 
          Margin="0,5,0,0" 
          Command={Binding CheckBoxChangedCommand} 
          /> 
2

bool (또는 IsChecked위한 Nullable<bool>) 값으로 변환하는 multi-value converter과 연계하여 MultiBinding 의해 데이터 객체 및 상기 서브 세트 컬렉션 모두 IsChecked 결합 수

<CheckBox.IsChecked> 
    <MultiBinding Converter="{StaticResource ObjectInListConverter}" Mode="OneWay"> 
     <Binding /> 
     <Binding Source="{StaticResource SubsetCollection}" /> 
    </MultiBinding> 
</CheckBox.IsChecked> 

컨버터 :

class ObjectInListConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     IList subset = values[1] as IList; 
     Nullable<bool> result = subset.Contains(values[0]); 
     return result; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+0

감사합니다. ObjectInListConverter를 Window.Resource로 정의하겠습니까? – Omar

+1

정확합니다. 그리고 MultiBinding에서'Mode = "OneWay"를 설정해야한다는 것에주의하십시오. – Clemens

+0

실제로 서브 세트 목록을 Window.Resource (StaticResource)로 정의하는 방법은 무엇입니까 ?? – Omar

1

Pop Catalin의 답변 외에도 IsChecked를 VM의 속성에 바인딩하고 명령이 실행될 때 해당 VM 속성을 수정해야합니다.

관련 문제