2014-01-13 1 views
0

Можно ли привязать TextBlock.Text к ObservableCollection, чтобы получить Count() или Sum (x => x.price)?Как привязать Textblock.Text к списку методов Count или Sum?

 productList= new ObservableCollection<productClass>(); 
    <TextBlock Name="SumPrice" Text="{Binding productList.Sum(x=>x.price) ??}" /> 
    <TextBlock Name="CountProducts" Text="{Binding productList.Count() ??}" /> 

Спасибо!

@EDIT:

ViewModel:

 public class ParagonClass : INotifyPropertyChanged 
     { 
     (...) private objects(...) 

//public objects start 
      public int PdID 
      { 
       get 
       { 
        return _pdID; 
       } 
       set 
       { 
        _pdID = value; 
        NotifyPropertyChanged("PdID"); 
       } 
      } 

//public objects end (there is lot of objects, so I didn't copy them all) 


     public event PropertyChangedEventHandler PropertyChanged; 
     private void NotifyPropertyChanged(String propertyName) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 
    } 

myWindow.xaml

 <ListView Grid.Row="1" Name="productsLV" > 
        <ListView.Resources> 
         <BooleanToVisibilityConverter x:Key="Boolean2Visibility" /> 
        </ListView.Resources> 
        <ListView.ItemTemplate> 
         <DataTemplate> 
(...) 

ListView имеет ItemsSource переплетены в ObservableCollection как:

myWindow.xaml.cs

   productsList = new ObservableCollection<ParagonClass>(); 
       productsLV.ItemsSource = productsList; 

Таким образом, мой ObservableCollection создает в окне как общедоступный. Чтобы получить сумму и количество в моем классе, мне нужно получить эту коллекцию, но без статики, я думаю, что это невозможно.

+0

Вы можете создать свойство, которое может вернуть нужное значение. Я думаю (см. Http://stackoverflow.com/questions/978473/wpf-how-to-bind-to-a-nested-property для возможных проблем) – cubitouch

+0

Ok , Понимаю. Но мой Datamodel - это класс, который не содержит ObservableCollection. Я создаю его в другом окне, поэтому у меня нет доступа к productList. Как ответил в последнем комментарии - должен ли я создавать статический ObservableCollection и использовать count/sum в datamodel или любым другим способом? – user13657

+1

Использовать свойство, которое обрабатывает значение, если инициализируется ObservableCollection, вернуть значение, если не вернуть 0 или -1? (покажите нам исходный код вашей модели, который мы можем вам помочь) – cubitouch

ответ

-1

Вы могли бы сделать int свойство в вашей модели представления, которая возвращает его:

public int Sum { get { return productList.Sum(x => x.Price); } } 

Тогда ваше связывание может быть:

<TextBlock Name="SumPrice" Text="{Binding Sum}" /> 

Вы могли бы сделать то же самое с вашим count собственности.

+0

Хорошо, я попробую эти ответы.Еще один вопрос: у меня есть класс как DataModel, поэтому я должен скорее создать ObservableCollection как статический в этом классе или как открытый, не статический в моем окне, где я использую класс? – user13657

+0

@ user13657 Я не вижу причины, по которой вы бы использовали 'static' в этом случае. Я бы сделал его общедоступным, не статическим. – gleng

+0

Ну, я думаю, это полезно, но в этот момент я задаюсь вопросом, как использовать это поле count/sum, чтобы я мог получить значение из другого окна. Проверьте первый пост, пожалуйста, что объясняет больше. – user13657

1

Вы не можете использовать запросы Linq в выражениях привязки, поэтому вам нужно выставить сумму как свойство.

Count уже является собственностью, поэтому вам не нужен метод Linq Count(). Просто привяжите к productList.Count.

0

Я бы посоветовал привязывая его к свойству в ViewModel, который возвращает правильное количество,

public int ProductCount 
{ 
    get { return productList.Count(); } 
} 

Вы можете сделать,

<TextBlock Name="CountProducts" Text="{Binding ProductCount}" /> 

И сделать убедитесь, что, когда productList изменения, вы поднимаете событие, чтобы уведомить мнение, что ему необходимо обновить свойство ProductCount,

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