TECHNOLOGIES
FORUMS
JOBS
BOOKS
EVENTS
INTERVIEWS
Live
MORE
LEARN
Training
CAREER
MEMBERS
VIDEOS
NEWS
BLOGS
Sign Up
Login
No unread comment.
View All Comments
No unread message.
View All Messages
No unread notification.
View All Notifications
Answers
Post
An Article
A Blog
A News
A Video
An EBook
An Interview Question
Ask Question
Forums
Monthly Leaders
Forum guidelines
Anja Simonsen
NA
41
15.5k
Wpf mvvm ObservableCollection doesn't update listView
Apr 19 2021 4:12 PM
I want to update a listview in View when adding/removing an entry in viewmodel.
When running to curser I can see, that my Categories_GetActive is updated with row 4(5,6,7 and so on) but it doesn't show up in my ListView.
So I miss something (I think) in binding the ListView to the ObservableCollection in the ViewModel. But cann't see what.
When starting the page, the 3 rows from db is in the listview so I know I have the correct binding
Can anyone please help me to see, what I'm doing wrong?
The UpdateSourceTrigger=PropertyChanged in the View I added to see, if that would help to update but no.
If You want the full code, just say so. There is nothing to hide in my code :-)
Best regards
Simsen :-)
My Listview
<ListView x:Name=
"LivCategories"
ItemsSource=
"{Binding Categories_GetActive, UpdateSourceTrigger=PropertyChanged}"
SelectedItem=
"{Binding SelectedCategory}"
Grid.Row=
"0"
Grid.Column=
"0"
>
<ListView.View>
<GridView>
<GridViewColumn Header=
"Id"
Width=
"50"
DisplayMemberBinding=
"{Binding CategoryId}"
/>
<GridViewColumn Header=
"Navn"
Width=
"250"
DisplayMemberBinding=
"{Binding CategoryName}"
/>
<GridViewColumn Header=
"Global"
Width=
"50"
DisplayMemberBinding=
"{Binding CategoryIsGlobal}"
/>
<GridViewColumn Header=
"Project"
Width=
"150"
DisplayMemberBinding=
"{Binding ProjectName}"
/>
<GridViewColumn Header=
"ProjectId"
Width=
"0"
DisplayMemberBinding=
"{Binding ProjectId}"
/>
</GridView>
</ListView.View>
</ListView>
My ViewModel
public
CategoryViewModel()
{
LoadCategories();
LoadProjects();
CmdSave =
new
MyICommand(SaveChanges);
CmdSaveNew =
new
MyICommand(SaveNew);
}
private
ObservableCollection<Category> _categories_GetAll;
public
ObservableCollection<Category> Categories_GetAll
{
get
{
return
_categories_GetAll;
}
set
{
_categories_GetAll = value;
OnPropertyChanged(
"Categories_GetAll"
);
}
}
//Active
private
ObservableCollection<Category> _categories_GetActive;
public
ObservableCollection<Category> Categories_GetActive
{
get
{
return
_categories_GetActive;
}
set
{
_categories_GetActive = value;
OnPropertyChanged(
"Categories_GetActive"
);
}
}
//Inactive
private
ObservableCollection<Category> _categories_GetInactive;
public
ObservableCollection<Category> Categories_GetInactive
{
get
{
return
_categories_GetInactive;
}
set
{
_categories_GetInactive = value;
OnPropertyChanged(
"Categories_GetInactive"
);
}
}
//Load Categories
public
void
LoadCategories()
{
DalCategory dalCategory =
new
DalCategory();
var categories = dalCategory.GetCategories();
if
(categories !=
null
)
{
//All
List<Category> Categories_GetAllList = categories;
Categories_GetAll =
new
ObservableCollection<Category>(Categories_GetAllList);
//Active
List<Category> Categories_GetActiveList = categories.Where(x => x.CategoryIsObsolete ==
false
).ToList();
Categories_GetActive =
new
ObservableCollection<Category>(Categories_GetActiveList);
//Inactive
List<Category> Categories_GetInactiveList = categories.Where(x => x.CategoryIsObsolete ==
true
).ToList();
Categories_GetInactive =
new
ObservableCollection<Category>(Categories_GetInactiveList);
}
}
In this method I add a row to the Categories_GetCative
public
void
SaveNew()
{
ResetMessages();
DalCategory dal =
new
DalCategory();
if
(!
string
.IsNullOrEmpty(CategoryName))
{
string
name = CategoryName;
bool
global = CategoryIsGlobal;
bool
obsolete = CategoryIsObsolete;
int
projectId = ProjectId;
Category cat =
new
Category();
cat.CategoryName = CategoryName;
cat.CategoryIsGlobal = CategoryIsGlobal;
cat.CategoryIsObsolete = CategoryIsObsolete;
cat.ProjectId = ProjectId;
int
categoryId = dal.NewCategory(cat);
if
(cat.CategoryIsObsolete ==
false
)
{
Categories_GetAll.Add(cat);
Categories_GetActive.Add(cat);
}
else
{
Categories_GetInactive.Add(cat);
}
MessageOk =
"Kategorien er gemt"
;
}
else
{
MessageError =
"Kategorinavn skal udfyldes"
;
}
}
Here I make my PropertyChanged
public
event
PropertyChangedEventHandler PropertyChanged;
public
void
OnPropertyChanged(
string
propertyName)
{
PropertyChanged?.Invoke(
this
,
new
PropertyChangedEventArgs(propertyName));
}
Reply
Answers (
1
)
Csharp bot user interface
Nuget command install all packages