2012-09-05 4 views
0

ListView/GridView에 포함 된 확인란의 상태를 수정하는 방법을 찾으려고합니다. 문제는 확인란이 별도의 DataGrid에있는 일부 레코드의 승인 상태에 의존한다는 것입니다. (예 : 승인 상태로 확인란을 사용 중입니다. True = 모두 승인 됨, False = 없음, null = 일부 승인 됨).ListView에 액세스하십시오.

DataContext는 엔터티이므로 처리 할 수있는 bool 값이 없습니다. 여기

<ListView x:Name="EmployeeNameListBox" Height="330" ItemsSource="{Binding}" SelectedValuePath="ID" SelectionChanged="EmployeeNameListBoxSelectionChanged"> 
    <ListView.View> 
     <GridView AllowsColumnReorder="False" >       
      <GridViewColumn> 
     <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <CheckBox IsThreeState="True" Checked="EmployeeCheckBoxChecked" Unchecked="EmployeeCheckBoxChecked" x:Name="CheckBoxHero"/>             
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
      <GridViewColumn> 
       <GridViewColumn.CellTemplate> 
        <DataTemplate> 
         <TextBlock> 
          <TextBlock.Text> 
           <MultiBinding StringFormat="{}{0}, {1} - {2}"> 
            <Binding Path="LastName" /> 
            <Binding Path="FirstName" /> 
            <Binding Path="EmployeeNumber" /> 
           </MultiBinding> 
          </TextBlock.Text> 
         </TextBlock> 
        </DataTemplate> 
       </GridViewColumn.CellTemplate> 
      </GridViewColumn> 
     </GridView> 
    </ListView.View> 
</ListView> 

내가 승인 상태 업데이트하기 위해 노력하고있어 어디 :

foreach (var employee in this.employees) 
{ 
    var records = from a in this.dailyActivities where a.Employee == employee select a; 

    var approvedRecords = from r in records where r.IsApproved == true select r; 

    if (approvedRecords.Count() == 0) 
    { 
     // None Approved checkbox state = false 
    } 
    else if (approvedRecords.Count() == records.Count()) 
    { 
     // All Approved checkbox state = true 
    } 
    else 
    { 
     // Some Approved Set Checkbox state to null 
    }     
} 
+0

Silverlight? WPF? 더 많은 태그를 추가하십시오 – Shyju

+0

bool 값이 없으면 래퍼 객체를 생성하고 (아마도 viewmodel이라고 부르십시오) 대신 해당 클래스의 값에 바인딩 하시겠습니까? – Patrick

+0

나는 궁극적으로 다른 부분 클래스에서 변수를 구현하는 것으로 갔다. 괜찮은 것 같아서, 나는이 컨트롤을 위해서만 필요한 부분 클래스를 피하려고 노력했다. – TheButlerDidIt

답변

0

당신의 ViewModel 클래스의 Nullable bool (bool?) 래퍼 속성을 만듭니다 (난 당신이 MVVM 패턴을 사용하는 가정입니다)를 단순히 결합하여 그 속성이있는 체크 박스는 RelativeSource입니다.

public bool? IsRecordApproved 
{ 
    get 
    { 
    ..... 
    // Your logic here 
    } 
} 

을 그리고 당신이 원하는 때마다 속성은 귀하의 재산에 재산 변경 이벤트를 발생하여 UI에 업데이트 할 -

는 해당 속성의 getter에 논리를 넣습니다. (INotifyProeprtyChanged 이벤트는 ViewModel 클래스에서 구현해야 함)

+0

현재 MVVM을 사용하고 있지 않습니다 .... – TheButlerDidIt