Should Item Grouping/Filter be in the ViewModel or View layer?
Posted
by
ronag
on Programmers
See other posts from Programmers
or by ronag
Published on 2013-08-02T14:08:10Z
Indexed on
2013/08/02
16:02 UTC
Read the original article
Hit count: 212
mvvm
I'm in a situation where I have a list of items that need to be displayed depending on their properties. What I'm unsure of is where is the best place to put the filtering/grouping logic of the viewmodel state?
Currently I have it in my view using converters, but I'm unsure whether I should have the logic in the viewmodel?
e.g.
ViewModel Layer:
class ItemViewModel
{
DateTime LastAccessed { get; set; }
bool IsActive { get; set; }
}
class ContainerViewModel
{
ObservableCollection<Item> Items {get; set;}
}
View Layer:
<TextView Text="Active Items"/>
<List ItemsSource={Binding Items, Converter=GroupActiveItemsByDay}/>
<TextView Text="Active Items"/>
<List ItemsSource={Binding Items, Converter=GroupInActiveItemsByDay}/>
or should I build it like this?
ViewModel Layer:
class ContainerViewModel
{
ObservableCollection<IGrouping<string, Item>> ActiveItemsByGroup {get; set;}
ObservableCollection<IGrouping<string, Item>> InActiveItemsByGroup {get; set;}
}
View Layer:
<TextView Text="Active Items"/>
<List ItemsSource={Binding ActiveItemsGroupByDate }/>
<TextView Text="Active Items"/>
<List ItemsSource={Binding InActiveItemsGroupByDate }/>
Or maybe something in between?
ViewModel Layer:
class ContainerViewModel
{
ObservableCollection<IGrouping<string, Item>> ActiveItems {get; set;}
ObservableCollection<IGrouping<string, Item>> InActiveItems {get; set;}
}
View Layer:
<TextView Text="Active Items"/>
<List ItemsSource={Binding ActiveItems, Converter=GroupByDate }/>
<TextView Text="Active Items"/>
<List ItemsSource={Binding InActiveItems, Converter=GroupByDate }/>
I guess my question is what is good practice in terms as to what logic to put into the ViewModel and what logic to put into the Binding in the View, as they seem to overlap a bit?
© Programmers or respective owner