WPF user interface does not update when properties change

I'm not sure what I'm doing wrong here ...

I have a custom HashTable that has a method that allows someone to remove the "PartNumber" (value) from the HashTable.

The removal method is as follows:

class COSC202HashTable : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; //.... private List<int> underlyingList; //... public List<int> HashList { get { return underlyingList; } } public void Delete(int partNumber) { string theAlgoritnm = Algorithm; if (String.Compare(theAlgoritnm, "Modulo Division") == 0 && String.Compare(Probe, "Linear Collision Resolution") == 0) { LinearModularDivision(partNumber, false); } if (String.Compare(theAlgoritnm, "Modulo Division") == 0 && String.Compare(Probe, "Key Offset Collision Resolution") == 0) { KeyOffsetModularDivision(partNumber, false); } if (String.Compare(theAlgoritnm, "Pseudorandom") == 0) { Pseudorandom(partNumber, false); } if (String.Compare(theAlgoritnm, "Rotation") == 0) { Rotation(partNumber, false); } NotifyPropertyChanged("HashList"); } //....... private void NotifyPropertyChanged(String info) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(info)); } } } 

I bind the base values โ€‹โ€‹of the HashTable to the user interface; however, the user interface does not update after deleting the value. I made sure that there are no problems with writing, etc.

This is the markup for my WPF interface:

 <Window.Resources> <COSC202:COSC202HashTable x:Name="TheHashTable" x:Key="TheHashTable" PropertyChanged="TheHashTable_PropertyChanged"></COSC202:COSC202HashTable> </Window.Resources> <ListView x:Name="HashResults" Height="32" Width="1200" Margin="10" HorizontalAlignment="Right" DataContext="{Binding Source={StaticResource TheHashTable}}" ItemsSource="{Binding Path=HashList}" HorizontalContentAlignment="Left"> <ListView.Background> <LinearGradientBrush StartPoint="0,0" EndPoint="0,2"> <GradientStop Color="#FF000000" Offset="0"></GradientStop> <GradientStop Color="DarkBlue" Offset="1"></GradientStop> </LinearGradientBrush> </ListView.Background> <ListView.ItemsPanel> <ItemsPanelTemplate> <StackPanel Orientation="Horizontal"></StackPanel> </ItemsPanelTemplate> </ListView.ItemsPanel> <ListView.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" > <TextBlock Text="{Binding Path=.}" FontSize="11" Foreground="Azure" VerticalAlignment="Top" ></TextBlock> <Label Content="|" VerticalAlignment="Top" FontSize="5"></Label> </StackPanel> </DataTemplate> </ListView.ItemTemplate> </ListView> 

This is the code I call to remove an item in a HashTable when a button is clicked:

  private void DeleteItem_Click(object sender, RoutedEventArgs e) { Object item = HashResults.SelectedItem; COSC202HashTable theHashTable = (COSC202HashTable)this.Resources["TheHashTable"]; if (theHashTable != null && item != null) { theHashTable.Delete((int)item); } HashResults.SelectedIndex = -1; } 

What am I doing wrong?

Thanks,

-Frinny

+7
user-interface wpf
source share
2 answers

First of all, in order to look for binding errors in the output window, this will quite often point you in the right direction.

If you are attaching to a custom collection, you may need to implement INotifyCollectionChanged . Either consider changing the data source to an ObservableCollection or you may need an ObservableDictionary in your case.

You also mentioned spelling errors, there are several ways to ensure that this is not a problem, check the MVVM base ObservableObject base

Your code is missing some information, such as the declaration for StaticResource TheHashTable.

Edit: Raising a PropertyChanged with respect to the List class will not notify about changes in this list, if you need a user interface to view changes in the list, change the list type to ObservableCollection or create a new property:

 public ObservableCollection Hash { get { return new ObservableCollection(this.HashList); } } 

and bind the Hash property.

+5
source share

One way to do this is to implement the INotifyCollectionChanged interface in your collection.

0
source share

All Articles