2013-05-22 1 views
1

다음과 같은 도움이 필요합니다. 모든 그룹화 작업 (특정 카테고리의 예 : 작업) 현재 선택한 그룹에있는 모든 작업의 ​​ 여러 데이터 격자의 조건에 바인딩

  • 목록의 모든 작업의 ​​

    • 목록을
    • 목록 : 내보기 모델은 다음을 포함합니다.

    이것은 3 개의 개별 데이터 격자로 표시됩니다.

    • 하나는 현재 선택된 그룹의 모든 작업을 표시하는 모든 그룹화 작업
    • 하나를 표시하는 모든 작업
    • 하나를 표시한다.

    그룹 작업보기에서 선택한 그룹에 따라 현재 그룹의 작업 목록을 변경할 수있는 현재 바인딩이 있습니다.

    지원 대상은 현재 선택된 작업 그룹 목록에 작업이 있는지 여부에 따라 변경할 기본 작업 목록의 행 배경색을 바인딩하는 것입니다.

    그래서 현재 작업 그룹을 변경하면 해당 그룹에있는 모든 작업이 강조 표시됩니다. 어떤 도움을 주시면 감사하겠습니다.

  • 답변

    2

    DataGrid 스타일과 MultiBinding 트리거 및 변환기를 결합하여이 문제를 해결했습니다.

    샘플 XAML 코드 :

    public class Job 
    { 
        public string Name { get; set; } 
        public int GroupId { get; set; } 
    } 
    

    다음 :

    public class JobGroup 
    { 
        public int Id { get; set; } 
        public string Name { get; set; } 
    } 
    

    dtJobs 유형의 오브젝트가 가득 DataGrid이다

    <Window.Resources> 
        <this:RowConverter x:Key="RowConverter" /> 
    </Window.Resources> 
    
    <Grid> 
        <DataGrid Name="dtGroups" HorizontalAlignment="Left" /> 
    
        <DataGrid Name="dtJobs" HorizontalAlignment="Right"> 
         <DataGrid.RowStyle> 
          <Style TargetType="DataGridRow"> 
           <Style.Triggers> 
            <DataTrigger Value="True"> 
             <DataTrigger.Binding> 
              <MultiBinding Converter="{StaticResource RowConverter}"> 
               <Binding Path="SelectedItem.Id" ElementName="dtGroups" /> 
               <Binding Path="GroupId" /> 
              </MultiBinding> 
             </DataTrigger.Binding> 
    
             <Setter Property="Background" Value="Green" /> 
            </DataTrigger> 
           </Style.Triggers> 
          </Style> 
         </DataGrid.RowStyle> 
        </DataGrid> 
    </Grid> 
    

    dtGroups 유형의 오브젝트가 가득 DataGrid 인 , 내가 확인하면 클래스의은 dtGroups의 선택한 작업 그룹과 같습니다. 그건 변환기에서 발생합니다 :

    class RowConverter : IMultiValueConverter 
    { 
        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
        { 
         if (values.Length != 2 || values[0] == null || values[1] == null) return false; 
    
         if (values[0].ToString() == values[1].ToString()) return true; 
    
         return false; 
        } 
    
        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) 
        { 
         throw new NotImplementedException(); 
        } 
    } 
    
    +0

    완벽하게, 나는 결국 MultiBinding을 사용하여 양쪽 값을 변환기로 전달합니다. 도와 주셔서 감사합니다. –

    관련 문제