2015-08-11 2 views
0

Я создаю основной XX/YY управление для приложения, общее количество достаточно легко, однако у меня возникли проблемы с подсчетом XX, который основан на состоянии ...Xaml обязательный для условного подсчета

<StackPanel Orientation="Horizontal" Height="55" Width="130" HorizontalAlignment="Center" VerticalAlignment="Center"> 
     <TextBlock Text="00" FontSize="40" Margin="5,0,5,5" /> 
     <TextBlock Text="/" FontSize="40" Margin="5,0,5,5"/> 
     <TextBlock Text="{Binding ItemList.Count, StringFormat={}{0:00}}" FontSize="40" Margin="5,0,5,5"/> 
    </StackPanel> 

Первый textBlock должен быть общим счетом ItemList, где propertyX = 1

любые идеи, как я могу установить вышеупомянутое связывание для первого текстового блока.

+0

Что именно вы пытаетесь показать? Текущая страница? Текущий выбранный элемент? – JPVenson

+0

@JPVenson количество элементов, для которых установлено соединение, каждый элемент имеет перечисление connectionStatus (0-2), поэтому, когда значение == 1 подсчитывает его. – asuppa

ответ

0

Чтобы получить счетчик, вы должны использовать конвертер.

public class ConditionalCountConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var output = 0; 

     var collection = value as IEnumerable<MyConnectable>(); 

     if(collection != null) 
     { 
      output = collection.Count(i => i.connectionStatus == 1); 
     } 

     return output; 
    } 

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

И ссылаться на него в вашем XAML следующим образом:

<UserControl xmlns:converters="clr-namespace:YourNamespaceNameGoesHere"> 
    <UserControl.Resources> 
     <ResourceDictionary> 
      <converters:ConditionalCountConverter x:Key="CountConverter" /> 
     </ResourceDictionary> 
    </UserControl .Resources> 
    <TextBlock Text="{Binding ItemList, Converter={StaticResource CountConverter}}" /> 
</UserControl> 

Вы можете найти дополнительную information about converters here.

Это делает экземпляр вашего объекта конвертера, к которому может обращаться XAML. Затем, когда это поле является средством визуализации и выполняется привязка, он передает связанный объект в метод конверторов Convert, и результат используется вместо объекта, на который был связан. Это очень мощно! Наслаждаться.

Как некоторая дополнительная информация, я лично считаю это «чистым» использованием конвертеров, потому что вы выполняете только половину этого. Как правило, результат вашего Convert метода должен быть передан непосредственно в ваш метод ConvertBack и преобразован в исходный объект, из которого он был получен. Это не всегда необходимо; в этом случае мы отправляем результат в поле только для отображения. Но если бы у вас был этот объект в виде сетки или какого-либо редактируемого элемента управления, вы можете реализовать его в обоих направлениях, чтобы пользователь мог обновить преобразованное значение, и правильная вещь произошла бы на бэкэнд. Это всего лишь мои два цента.