Click here to Skip to main content
15,914,014 members
Home / Discussions / WPF
   

WPF

 
QuestionShow task bar after maximise the window in wpf Pin
Naufalkk13-May-11 0:08
Naufalkk13-May-11 0:08 
QuestionWPF DataGrid - automatically insert new line on tab in last visible column Pin
Nicolai Schrade12-May-11 4:05
Nicolai Schrade12-May-11 4:05 
AnswerRe: WPF DataGrid - automatically insert new line on tab in last visible column Pin
dasblinkenlight12-May-11 4:38
dasblinkenlight12-May-11 4:38 
GeneralRe: WPF DataGrid - automatically insert new line on tab in last visible column Pin
Nicolai Schrade13-May-11 4:00
Nicolai Schrade13-May-11 4:00 
GeneralRe: WPF DataGrid - automatically insert new line on tab in last visible column Pin
dasblinkenlight13-May-11 4:10
dasblinkenlight13-May-11 4:10 
GeneralRe: WPF DataGrid - automatically insert new line on tab in last visible column Pin
Nicolai Schrade13-May-11 4:44
Nicolai Schrade13-May-11 4:44 
Questionincorrect value retrieved. Pin
arkiboys11-May-11 3:35
arkiboys11-May-11 3:35 
AnswerRe: incorrect value retrieved. Pin
Ian Shlasko11-May-11 3:40
Ian Shlasko11-May-11 3:40 
GeneralRe: incorrect value retrieved. Pin
arkiboys11-May-11 3:41
arkiboys11-May-11 3:41 
GeneralRe: incorrect value retrieved. Pin
Ian Shlasko11-May-11 3:48
Ian Shlasko11-May-11 3:48 
GeneralRe: incorrect value retrieved. Pin
arkiboys12-May-11 1:59
arkiboys12-May-11 1:59 
GeneralRe: incorrect value retrieved. Pin
Pete O'Hanlon12-May-11 2:12
mvePete O'Hanlon12-May-11 2:12 
GeneralRe: incorrect value retrieved. Pin
arkiboys12-May-11 3:09
arkiboys12-May-11 3:09 
GeneralRe: incorrect value retrieved. Pin
Wayne Gaylard12-May-11 2:26
professionalWayne Gaylard12-May-11 2:26 
GeneralRe: incorrect value retrieved. Pin
Ian Shlasko12-May-11 3:16
Ian Shlasko12-May-11 3:16 
AnswerRe: incorrect value retrieved. Pin
Abhinav S11-May-11 6:27
Abhinav S11-May-11 6:27 
QuestionUse of Observablecollection in Silverlight Pin
Member 455049311-May-11 3:17
Member 455049311-May-11 3:17 
AnswerRe: Use of Observablecollection in Silverlight Pin
Ian Shlasko11-May-11 3:27
Ian Shlasko11-May-11 3:27 
GeneralRe: Use of Observablecollection in Silverlight Pin
Member 455049311-May-11 4:56
Member 455049311-May-11 4:56 
GeneralRe: Use of Observablecollection in Silverlight Pin
Ian Shlasko11-May-11 5:11
Ian Shlasko11-May-11 5:11 
GeneralRe: Use of Observablecollection in Silverlight Pin
Member 455049311-May-11 5:42
Member 455049311-May-11 5:42 
GeneralRe: Use of Observablecollection in Silverlight Pin
Ian Shlasko11-May-11 6:03
Ian Shlasko11-May-11 6:03 
GeneralRe: Use of Observablecollection in Silverlight Pin
Pete O'Hanlon11-May-11 6:31
mvePete O'Hanlon11-May-11 6:31 
There are two parts to binding that you are concerned with here. The first, as you are aware, is the use of ObservableCollection. This tells you that the collection has changed; in other words that items have been added or deleted in the collection. This does not tell you that an individual item has changed.

To capture notifications that an individual item has changed, you need to implement INotifyPropertyChanged in the class (or an ancestor of). Simplistically, when an item changes, the PropertyChanged event fires, and this tells the binding engine that an item needs to be updated in the UI. If you look at samples, you'll typically see a class called something like ViewModelBase. This class is the one that implements the property changed notification, saving you from having to update the code in lots and lots of locations. Here's a typical example of this class:
C#
public abstract class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    /// <summary>
    /// Raised because the property has changed.
    /// </summary>
    /// <param name="property">The name of the property that changed.</param>
    protected virtual void OnChanged(string property)
    {
      var handler = PropertyChanged;
      if (handler == null)
      {
        return;
      }

      handler(this, new PropertyChangedEventArgs(property));
    }
}
Now, you'll derive from this class and call OnChanged in your property setters. This would typically look something like this:
C#
private string _passCode;
public string PassCode
{
  get { return _passCode; }
  set
  {
    if (_passCode == value) return;
    _passCode = value;
    OnChanged("PassCode");
  }
}
When the user changes a value in PassCode, the value is updated and then the change notification is raised which tells the binder to update only that named field (if you want to update all fields, you pass an empty string to OnChanged). There are a couple of things to note here - always test to see if the update value is the same as the value you already store, this prevents you updating something that hasn't changed; the name of the property that is raised must match the name of the property, so calling "Pa4sCode" would fail to update the value as it's not the name of the property (PassCode).

I hope that this makes sense to you. All too often people fall into the trap of assuming that ObservableCollection covers both sides. It's an easy mistake to make.

Forgive your enemies - it messes with their heads


My blog | My articles | MoXAML PowerToys | Mole 2010 - debugging made easier - my favourite utility


GeneralRe: Use of Observablecollection in Silverlight Pin
Member 455049312-May-11 6:01
Member 455049312-May-11 6:01 
GeneralRe: Use of Observablecollection in Silverlight Pin
Pete O'Hanlon12-May-11 6:21
mvePete O'Hanlon12-May-11 6:21 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.