2013-10-03 40 views
0

我需要在文本框內顯示CollectionViewSource中不屬於某個類型的元素的數量。我試圖通過在TextBlock的Text屬性和集合之間添加一個Converter來完成此操作,但是當我將項目添加到綁定到CollectionViewSource的ObservableCollection時,不會觸發Converter。該集合確實發生了變化,因爲如果我直接綁定到Count屬性,則會觸發轉換器。通過轉換器綁定CollectionViewSource不觸發添加項目時的轉換器

這是CollectionViewSource:

<CollectionViewSource x:Key="PatientRelatedWorkflowsCollection" 
           Source="{Binding PatientRelatedWorkflows}" 
           x:Uid="68cbfcf5481c43bdb83d6b31fe8ddc34"> 
      <CollectionViewSource.SortDescriptions> 
       <my:SortDescription PropertyName="Patient.LastName" x:Uid="cf8cdd34c5d14c049a27e46848aca60d" /> 
      </CollectionViewSource.SortDescriptions> 
      <CollectionViewSource.GroupDescriptions> 
       <PropertyGroupDescription PropertyName="Patient" 
              Converter="{StaticResource WorkflowPatientGroupConverter}" 
              x:Uid="d03e9b90df654454b5f5f7a8ee9cb1bf"> 
       </PropertyGroupDescription> 
      </CollectionViewSource.GroupDescriptions> 
     </CollectionViewSource> 

這裏是結合:

<TextBlock Text="{Binding Converter={StaticResource CountNonConsultationWorkflowsConverter}}" /> 

這裏是轉換器:

public class CountNonConsultationWorkflowsConverter: IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var workflowItems = value as ReadOnlyObservableCollection<Object>; 
     if (workflowItems != null) 
     { 
      return workflowItems.Count(item => (item as WorkflowDataViewModel) != null && (item as WorkflowDataViewModel).WorkflowType != WorkflowType.ConsultPatient).ToString(CultureInfo.InvariantCulture); 
     } 
     return "0"; 
    } 

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

注:我設法使它使用MultiBinding和MultiValueCo一起工作像下面這樣的逆變器。這個可以工作,因爲「Count」屬性確實觸發了一個PropertyChange,但我確實覺得這有點破解,並希望有一個更好的解決方案。

<TextBlock.Text> 
       <MultiBinding Converter="{StaticResource CountNonConsultationWorkflowsConverter}"> 
        <Binding x:Uid="eb26d2c0bdb94d18ab48d8e25ce5f5ea" /> 
        <Binding Path="Count" x:Uid="5555c981fda94bc6ad823c2f1e94b0f1" /> 
       </MultiBinding> 
      </TextBlock.Text> 

任何想法,我怎麼能做得更好?我感謝任何幫助。

+0

如果您遵循MVVM模式,我會將TextBlock綁定到ViewModel中的屬性CountOfCertainType並移除轉換器。 – LPL

回答

0

您可以將UpdateSourceTrigger設置爲Explicit,並在每次添加項目時更新它。

+0

我需要保持與MVVM模式一致,所以我不想在後面的代碼中訪問控件。 – louie