通过转换器绑定集合视图源,在添加项时不触发转换器

本文关键字:转换器 添加 绑定 集合 视图 | 更新日期: 2023-09-27 18:33:39

我需要在文本块内显示来自CollectionViewSource的元素数量,这些元素不属于某种类型。我试图通过在 TextBlock 和集合的 Text 属性之间添加一个转换器来实现这一点,但是当我将项目添加到绑定到 CollectionViewSource 的 ObservableCollection 时,转换器不会触发。集合确实会更改,因为如果我直接绑定到 Count 属性,这将触发转换器。

这是 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();
    }
}

注意:我设法通过将多重绑定与多值转换器一起使用来使其工作,如下所示。这个有效,因为"计数"属性确实触发了属性更改,但我确实觉得这有点黑客,并希望有一个更好的解决方案。

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

关于我如何做得更好的任何想法?我感谢任何帮助。

通过转换器绑定集合视图源,在添加项时不触发转换器

您可以将 UpdateSourceTrigger 设置为 Explicit,并在每次添加项目时更新它。