2014-02-14 65 views
0

我有一個Customer類:如何獲得基於第一列的求和列值的一個值

 private int _id; 
     private int _value; 
     private int _dynamicColumn; 

     public int ID 
     { 
      get { return _id; } 
      set { _id = value; NotifyPropertyChanged("CustomerId"); } 
     } 

     public int Value 
     { 
      get { return _value; } 
      set { _value = value; NotifyPropertyChanged("Customername"); } 
     } 

     public int DynamicValue 
     { 
      get { return _id + _value; } 
      set { _dynamicColumn = value; NotifyPropertyChanged("CustomerAddress"); } 
     } 

在視圖模型:

ClickCommand = new RelayCommand(paremer => 
       { 
        var customeList = SampleMVVM.Service.Service.GetAllCustomers(); 
        Customers = new ObservableCollection<Customer>(customeList); 
        NotifyPropertyChanged("Customers"); 

       }); 

現在的第三列是求和Col1 + Col2。但我想Col3應該只有Col1的總和值。在這種情況下897.

試圖在屬性getter上做到這一點,但不會是可行的,因爲不會有所有列的值。

enter image description here

在按鈕點擊下面的代碼被稱爲:

var customerRecords = default(IEnumerable<Customer>); 

      try 
      { 
       //string[] names = new string[] { "Steve", "Zones", "Ram", "RaOne", "Chacha", "GOne", "Subhen", "Mithilesh", "Annapurna" }; 
       Random ranomizer = new Random(); 


       customerRecords = new List<Customer>(
        from index in Enumerable.Range(1, 20) 
        select new Customer 
        { 
         ID = ranomizer.Next(35,100), 
         Value = ranomizer.Next(12,89), 
         // DynamicValue = this. 
        } 

      ); 

我可以在這裏做什麼?

編輯:
我不希望動態值爲_id + _值。相反,我想動態值作爲第一列值的總和

+0

你能解釋_Dynamic值作爲第1列值的總和only_?每行應該有所有其他行的總和? – dkozl

+0

根據您已在屏幕截圖中顯示的數據向我們展示您期望的輸出示例。 –

回答

0

能夠使用元素綁定和使用轉換器來做到這一點。因此,我的XAML現在看起來像:

<DataGrid AutoGenerateColumns="False" 
        Name="dataGrid1" 
        ItemsSource="{Binding Customers}" Grid.Row="1" 
       Grid.ColumnSpan="2" HorizontalAlignment="Stretch"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Header="Id" Binding="{Binding ID}"/> 
       <DataGridTextColumn Header="Value" Binding="{Binding Value}"/> 
       <DataGridTextColumn Header="DynamicValue" Binding="{Binding ElementName=dataGrid1,Converter={StaticResource columnConverter}}"></DataGridTextColumn> 
      </DataGrid.Columns> 
     </DataGrid> 

有意將Auto Generate設置爲False以將轉換器添加到第三列。

Now Converter僅查找第1列的行並對其進行總結。

class FirstColumnConverter:IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
     { 
      DataGrid dg = value as DataGrid; 
      var totalItems = dg.Items.Count; 
      int summedValue = 0; 

      for (int i = 0; i < totalItems-1; i++) 
      { 
        var currentItem = (Customer) dg.Items.GetItemAt(i); 
        summedValue += currentItem.ID; 
      } 

      return summedValue; 
     } 
    } 
-1

我不完全明白你想完成什麼。

如果你想擁有的第一和第二值之和在你的第三個價值,你需要像一個屬性:

public DynamicValue 
{ 
    get 
    { 
     return this.ID + this.Value; 
    } 
} 

,如果第一或第二值改變(在屬性的setter)您還必須調用:

NotifyPropertyChanged("DynamicValue"); 
+0

你的回答已經在我的問題中用代碼片斷假定了。我只想求第1列中的值的總和,而不是所有的coumns的總和 – Simsons

+0

那麼,您是否已經找到了解決方案? 如果不是 - 您應該創建一個不屬於您的Customer類但在您的ViewModel中的屬性。該物業將總結所有你需要的價值。綁定它與一個RelativeSource FindAncestor綁定,它應該工作。 – Koscik

0

你應該有一個自定義的客戶類

public class CustomCustomer 
{ 
    public Customer customers { get; set; } 
    public int Sum 
    { 
     get 
     { 
     return customers.Select(v => v.ID).Sum(); 
     } 
    } 
} 

然後你就可以使用

new ObservableCollection<CustomCustomer> 

希望它可以幫助綁定路徑= Customers.ID,路徑= Customers.Value,路徑= SUM 您的數據網格。

相關問題