2014-11-18 5 views
0

Я использую Datagrid, связанный с ObservableCollection в классе Logbook. Также в классе Logbook у меня есть множество других свойств, которые в основном учитывают разные времена, которые необходимо добавить.Datagrid изменяет обновление многих свойств?

Проблема, с которой я столкнулся, заключается в том, что я не могу уведомлять свойства для обновления, когда что-то добавлено или удалено из Datagrid, потому что у меня CanUserAddRows установлено значение true.

Есть ли способ установить в XAML обновление этих свойств или наследовать от ObservableCollection и переопределить методы и добавить мои собственные свойства с уведомлениями?

LogbookEntry.cs
public class LogbookEntry { 
    public decimal TotalTime { get; set; } 
    public decimal SoloTime { get; set; } 
    public decimal PICTime { get; set; } 
} 

Logbook.cs

public class Logbook { 
    public ObservableCollection<LogbookEntry> Entries { get; private set; } 

    public decimal TotalTime { get; private set; } // THESE ALL NEED TO BE ADDED 
    public decimal SoloTime { get; private set; } // UP IN THE SAME COLUMN FROM 
    public decimal PICTime { get; private set; }  // ALL ENTRIES 
} 

Сейчас Datagrid просто перечисляет TotalTime, SoloTime и столбцов PICTime как 0, потому что у меня нет возможности обновлять их, когда материал добавляется к Записи. Я имею в виду, может быть:

Logbook.cs

public class Logbook : ObservableCollection<LogbookEntry> { 
    public decimal TotalTime { get; private set; } 
    public decimal SoloTime { get; private set; }  
    public decimal PICTime { get; private set; } 

    public override Add(...) { 
    base.Add(...); 
    TotalTime += logbookEntry.TotalTime; 
    OnPropertyChanged(TotalTime); 

    SoloTime += logbookEntry.SoloTime; 
    OnPropertyChanged(SoloTime); 

    PICTime += logbookEntry.PICTime; 
    OnPropertyChanged(PICTime); 
    } 
} 

Если нет какой-либо способ для меня, чтобы сделать это из XAML ...

ответ

1

Сделайте TotalTime, SoloTime, PICTime свойства OneWay связанные значения (нет сеттера) и реализовать геттер в качестве вызова LINQ для Sum() значений от Entries.

Слушайте событие Entries.CollectionChanged и добавляйте его к Entries, прислушайтесь к событию PropertyChanged каждого предмета (если он у него нет, реализуйте его). Затем, когда получено какое-либо из этих событий, поднимите событие PropertyChanged для соответствующего свойства Logbook (или все, в случае добавления или удаления нового объекта LogbookEntry).

Таким образом, когда что-либо изменяется в вашем ViewModel, вы можете автоматически уведомлять пользовательский интерфейс о том, что что-то изменилось, и пользовательский интерфейс обновит себя, вызвав соответствующее свойство getter.

+0

Спасибо за это! Чтобы сделать его более конкретным, можете ли вы предоставить несколько строк кода? Еще раз спасибо! – keelerjr12

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