我需要在文本框內顯示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>
任何想法,我怎麼能做得更好?我感謝任何幫助。
如果您遵循MVVM模式,我會將TextBlock綁定到ViewModel中的屬性CountOfCertainType並移除轉換器。 – LPL