Двустороннее связывание через индексы массивов в XAML - PullRequest
0 голосов
/ 04 декабря 2011

У меня есть приложение Silverlight, которое использует элемент управления RadGridView.Когда пользователь обновляет значение в столбце, я ожидаю, что сумма будет обновлена.Такое поведение показано на демонстрационном сайте Telerik.У меня есть предчувствие, что это моя модель зренияНо я не уверен.Вот фрагмент моего вида и модель-вид.

Просмотр

<telerik:RadGridView>
  <telerik:GridViewDataColumn Header="Column1" DataMemberBinding="{Binding Path=Tally[0], Mode=TwoWay}"> 
    <telerik:GridViewDataColumn.AggregateFunctions>
      <telerik:SumFunction ResultFormatString="{}{0:N2}" SourceField="Tally[0]" />
    </telerik:GridViewDataColumn.AggregateFunctions>
  </telerik:GridViewDataColumn>

  <telerik:GridViewDataColumn Header="Column2" DataMemberBinding="{Binding Path=Tally[1], Mode=TwoWay}">
    <telerik:GridViewDataColumn.AggregateFunctions>
      <telerik:SumFunction ResultFormatString="{}{0:N2}" SourceField="Tally[1]" />   
    </telerik:GridViewDataColumn.AggregateFunctions>
  </telerik:GridViewDataColumn>

  <telerik:GridViewDataColumn Header="Column3" DataMemberBinding="{Binding Path=Tally[2], Mode=TwoWay}"> 
    <telerik:GridViewDataColumn.AggregateFunctions>
      <telerik:SumFunction ResultFormatString="{}{0:N2}" SourceField="Tally[2]" /> 
    </telerik:GridViewDataColumn.AggregateFunctions>
  </telerik:GridViewDataColumn> 
</telerik:RadGridView>

ViewModel

public class MyViewModel : ViewModel
{
  private ObservableCollection<Item> items = Item.GetAll();
  public ObservableCollection<Item> Items
  {
    get { return items; }
    set { 
      items = value;
      NotifyPropertyChanged("Items");
    }
  }
}

public class Item : ViewModel
{
  private List<int> tally = new List<int>();
  public List<int> Tally
  {
    get { return tally; }
    set 
    { 
      tally = value;
      NotifyPropertyChanged("Tally");
    }
  }

  public Item()
  {
    for (int i = 0; i < 10; i++)
      this.Tally.Add(i);
  }

  public static ObservableCollection<Item> GetAll()
  {
    ObservableCollection<Item> items = new ObservableCollection<Item>();
    for (int i = 0; i < 10; i++)
      items.Add(new Item(i));
    return items;
  }
}

Почему общая сумма не обновляется?

1 Ответ

0 голосов
/ 09 декабря 2011

Как, если вы измените свойство Tallt класса Item на

   public class Item : ViewModel
   {
        private int tally ;
        public int Tally
        {
              get { return tally; }
               set 
                 { 
                     tally = value;
                     NotifyPropertyChanged("Tally");
       }
   }

и

 <telerik:GridViewDataColumn Header="Column1" DataMemberBinding="{Binding Path=Tally, Mode=TwoWay}"> 
     <telerik:GridViewDataColumn.AggregateFunctions>
         <telerik:SumFunction ResultFormatString="{}{0:N2}" SourceField="Tally" />
     </telerik:GridViewDataColumn.AggregateFunctions>
 </telerik:GridViewDataColumn> 
...