Contact Over deze website Colofon
RSS Feeds Web log bouwer Adverteren?
  Sitemap Disclaimer
E-mailadres  
Wachtwoord  

Op 16-11-2016, 10:59
 
Auteur: Marcel
 
  Neem contact op
Aantal keren bekeken: 74277
 
 Alle 78 artikelen van Marcel
 
               abonneren   Abonneren

Re: C# How to automatically update a XAML listview item without refreshing the whole listview

There are many examples describing how to automatically update a XAML listview item based on its bound object properties, but somehow the whole story is lost in cyberspace I made up my own basic example, which would help me the next time. I hope it is useful your you too.

So - Instead of updating the whole listview with the dreadfully slow ListView.Items.Refresh() we only want to update the selected listviewitem. We fill a XAML listview with 2 bound properties, use some code behind and a simple class to get it all done.


Let's go.


MainWindow.xaml:

<ListView x:Name="lvPersons" SelectionMode="Single"
           PreviewMouseDown="lvPersons_PreviewMouseDown">
     </ListView.Resources>
     <ListView.ItemContainerStyle>
         <Style TargetType="ListViewItem">
             <Setter Property="IsSelected" Value="{Binding IsHighLighted}"/>
             <Style.Triggers>
                 <Trigger Property="IsSelected" Value="true" >
                     <Setter Property="Foreground" Value="Blue" />
                     <Setter Property="Background" Value="Transparent" />
                 </Trigger>
             </Style.Triggers>
         </Style>
     </ListView.ItemContainerStyle>
     <ListView.View>
         <GridView>
             <GridViewColumn Header="First name" Width="100">
                 <GridViewColumn.CellTemplate>
                     <DataTemplate>
                         <TextBlock x:Name="tbFirstName" Text="{Binding FirstName}" />
                     </DataTemplate>
                 </GridViewColumn.CellTemplate>
             </GridViewColumn>
         </GridView>
     </ListView.View>
</ListView>

<TextBox x:Name="txtFirstName" Text="" TextChanged="txtFirstName_TextChanged" />

MainWindow.xaml.cs:

private void mainWindow_Loaded(object sender, RoutedEventArgs e)
{
     Person person = new Person();
     person.FirstName = "Calmer";
     // auto selects the listview item
     person.IsHighLighted = true;
     lvPersons.Items.Add(person);
}

private void lvPersons_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
     Person person = (Person)lvPersons.SelectedItem;
     // selects the clicked Person object
     person.IsHighLighted = true;
     txtFirstName.Text = Person.FirstName;
}

private void txtFirstName_TextChanged(object sender, TextChangedEventArgs e)
{
     TextBox textBox = (TextBox)sender;
     Person person = (Person)lvPersons.SelectedItem;
     // auto updates the listview item.
     person.FirstName = textBox.Text;
}

Finally, the Person class:

public class Person : INotifyPropertyChanged
{
     public event PropertyChangedEventHandler PropertyChanged;

     protected virtual void OnPropertyChanged(string propertyName)
     {
         PropertyChangedEventHandler handler = PropertyChanged;
         if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
     }

     protected bool SetField<T>(ref T field, T value, string propertyName)
     {
         if (EqualityComparer<T>.Default.Equals(field, value)) return false;
         field = value;
         OnPropertyChanged(propertyName);
         return true;
     }

     private bool isHighLighted = true;

     public bool IsHighLighted
     {
         get { return isHighLighted; }
         set { isHighLighted = value;
             OnPropertyChanged("IsHighLighted"); }
     }

     private string firstName = "";

     public string FirstName
     {
         get { return firstNummer; }
         set { firstName = value;
             OnPropertyChanged("FirstName"); }
     }
}


terug naar top Terug naar Top doorsturen Doorsturen reageer Reageren

Reacties

abonneren 

  166 Abonnees
abonneren 

  530 Abonnees

abonneren 

  26939 Abonnees


mona 
meme_samh@yahoo.com
 21-11-2015, 06:25
شكراااا جداااا
 
Vanilla23 18-11-2015, 20:54
Clean example. Thanks a lot!
 

Laat hier een reactie achter (e-mailadres is niet verplicht).
Een plaatje meesturen mag: .bmp, .gif, .jpg of .png.


Naam E-mailadres niet verplicht.
Reactie



Typ het gekleurde woord over en klik op [Versturen].


 
Rubrieken  
Laatste nieuws 5 
Software Development 38 
Reviews 2 
Games Corner  
Vraag en Aanbod ICT  
Skills uitwisselen 1 
Lekker zeuren 1 
Nieuwe gadgets 5 
Favoriete YouTubes 28 
Digitale ergernissen 10 
Feeds van de dag 1 
Technische geintjes 10 
Meer>>
Nieuwe auteurs
Priscila Pikena
0 artikelen
Vanamero
0 artikelen
JanV
0 artikelen
Kevin Favaro
0 artikelen
De meiden
2 artikelen
Koko Subratsingh
0 artikelen
Jocus de Velde
0 artikelen
Sophie Testeringen
7 artikelen
Harold Verhage
0 artikelen
Meer>>
 
Nieuwe artikelen
16-11-2016, 10:59
26-10-2016, 10:57
02-10-2015, 22:38
23-07-2015, 07:34
15-07-2015, 13:41
20-04-2015, 20:38
19-04-2015, 19:48
Meer>>
Meest bekeken
20-04-2015, 20:38
16-11-2016, 10:59
23-07-2015, 07:34
18-08-2014, 23:48
16-04-2014, 09:47
24-01-2015, 09:52
18-05-2014, 22:20
Meer>>
Verder op deze site  
Downloads 8 
Web log van de bouwer 4 
Over deze website 8 
Stats  
Bezoekers vandaag: 11
Artikelen: 131
Rubrieken: 19
Auteurs: 27
Overig
Admin Login
Credits Website
rss RSS alle artikelen
Links
Twitter
Youtube - MijnRaad.nl
Feedback
Wat vind je van deze site?
Mis je een rubriek? Laat het ons weten!