First off usually you make 2 separate objects. The reason being is it is cleaner and follows separation of concerns. What you have done is implemented INotifyPropertyChange on the actual UI class which has no purpose. The UI class has full access to its UI elements so why use extra eventing (i.e. PropertyChange)?
Secondly your setter logic is a bit odd. You are adding a value to a collection and then always setting the "return" value to be the first item. This means it will never change after an item is added.
And lastly you are not posting the property change on the setter. I see it in a button click but the button click does not do anything else.
Not sure why you have a collection but try something more simple:
private string firstno;
public string FirstNo
{
get
{
return firstno;
}
set
{
if (_firstNo != value)
{
firstno = value;
NotifyPropertyChange(string "FirstNo");
}
}
}
Also, if you follow my recomendation and actually separate the objects (ViewModel and View) you want to consider what type of binding. This depends on if you are receiving the data from your view model (OneWay -> default), view (OneWayToSource), or both (TwoWay). Also there can be some cases where you use OneTime but that is rare.
Maybe review some of the stuff on MSDN to help.
http://msdn.microsoft.com/en-us/library/ms752347.aspx[
^]