2014-01-13 1 views
0

ObservableCollection에 TextBlock.Text를 바인딩하여 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 :

뷰 모델 :

 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> 
(...) 

리스트 뷰는 itemssource 같이 ObservableCollection에 위해 바인더 제본 가지고

myWindow.xaml.cs

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

내 ObservableCollection이 공개 창으로 생성됩니다. 합계를 얻고 내 수업에서 계산하려면 그 컬렉션을 가져올 필요가 있지만 정적이 아닌 것은 불가능하다고 생각합니다. 그런 다음

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

당신이 될 수 바인딩 :

+0

내가 추측해야하는 값을 반환 할 수있는 속성을 만들 수 있습니다 (가능한 문제는 http://stackoverflow.com/questions/978473/wpf-how-to-bind-to-a-nested-property를 참조하십시오) – cubitouch

+0

확인 이해해. 하지만 내 Datamodel ObservableCollection을 포함하지 않는 클래스입니다. 나는 다른 창에서이를 생성하므로 실제로 productList에 액세스 할 필요가 없습니다. 마지막 코멘트에서 대답했듯이 - 오히려 정적 ObservableCollection을 만들고 datamodel 또는 다른 방법으로 count/sum을 사용해야합니까? – user13657

+1

ObservableCollection이 초기화 된 경우 값을 처리하는 속성을 사용하고 0 또는 -1을 반환하지 않으면 값을 반환 하시겠습니까? (우리가 당신을 도울 수있는 모델의 소스 코드를 보여주십시오) – cubitouch

답변

-1

당신은 그것을 돌려보기 모델의 int 속성을 만들 수

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

당신은 당신의 count 속성과 동일한 기능을 수행 할 수 있습니다.

+0

좋아, 그 해답을 시도해 보겠습니다.한 가지 더 질문 - 내 DataModel 클래스가 있으므로 ObservableCollection을이 클래스의 정적 파일로 만들거나 클래스를 사용하는 내 창에서 정적이 아닌 정적 파일로 생성해야합니다. – user13657

+0

@ user13657이 경우'static '을 사용하는 이유는 없습니다. 나는 그것을 비 정적으로 공개 할 것이다. – gleng

+0

글쎄요, 그게 도움이 될 것 같아요.하지만 이번에는 다른 곳에서 값을 얻을 수 있도록이 카운트/합계 필드를 사용하는 방법을 궁금해합니다. 첫 번째 게시물을 확인하십시오. 자세히 설명되어 있습니다. – user13657

1

바인딩 식에서 Linq 쿼리를 사용할 수 없으므로 합계를 속성으로 표시해야합니다.

Count은 이미 속성이므로 Linq Count() 메서드가 필요하지 않습니다. productList.Count에 바인딩하십시오.

0
나는 정확한 수를 반환하는 뷰 모델의 속성에 바인딩 권합니다

,

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

당신은 할 수있다,

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

그리고는, 그 때 productList 변경 확인 할 이벤트를 발생시켜 ProductCount 속성을 업데이트해야한다는 메시지를 표시하면

this.PropertyChanged(this, new PropertyChangedEventArgs("ProductCount")); 
관련 문제