2013-10-03 2 views
0

Мне нужно показать внутри текстового блока количество элементов из CollectionViewSource, которые не имеют определенного типа. Я попытался это сделать, добавив Конвертер между свойством Text Text и блоком, но конвертер не запускается, когда я добавляю элементы в привязку ObservableCollection к CollectionViewSource. Коллекция будет изменена, потому что, если я привяжу непосредственно к свойству Count, это вызовет конвертер.Binding 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 nverter, как показано ниже. Это работает, потому что свойство «Count» запускает PropertyChange, но я чувствую, что это немного взломанный и хотел бы иметь более приятное решение.

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

Любая идея о том, как я могу сделать это лучше? Я ценю любую помощь.

+0

Если вы следуете за шаблоном MVVM, я бы привязал TextBlock к свойству CountOfCertainType в ViewModel и удалю конвертер. – LPL

ответ

0

Вы можете установить UpdateSourceTrigger в Explicit и обновлять его каждый раз, когда вы добавляете элемент.

+0

Мне нужно поддерживать соответствие шаблону MVVM, поэтому я не хочу получать доступ к элементу управления в коде. – louie

Смежные вопросы