I'm thinking this should be easy, but I can't seem to figure this out.
Take these properties from an example ViewModel (ObservableViewModel implements INotifyPropertyChanged):
class NameViewModel : ObservableViewModel
{
Boolean mShowFullName = false;
string mFirstName = "Wonko";
string mLastName = "DeSane";
private readonly DelegateCommand mToggleName;
public NameViewModel()
{
mToggleName = new DelegateCommand(() => ShowFullName = !mShowFullName);
}
public ICommand ToggleNameCommand
{
get { return mToggleName; }
}
public Boolean ShowFullName
{
get { return mShowFullName; }
set { SetPropertyValue("ShowFullName", ref mShowFullName, value); }
}
public string Name
{
get { return (mShowFullName ? this.FullName : this.Initials); }
}
public string FullName
{
get { return mFirstName + " " + mLastName; }
}
public string Initials
{
get { return mFirstName.Substring(0, 1) + "." + mLastName.Substring(0, 1) + "."; }
}
}
The guts of such a [insert your adjective here] View using this ViewModel might look like:
<TextBlock x:Name="txtName"
Grid.Row="0"
Text="{Binding Name}" />
<Button x:Name="btnToggleName"
Command="{Binding ToggleNameCommand}"
Content="Toggle Name"
Grid.Row="1" />
The problem I am seeing is when the ToggleNameCommand is fired. The ShowFullName property is properly updated by the command, but the Name binding is never updated in the View.
What am I missing? How can I force the binding to update? Do I need to implement the Name properties as DependencyProperties (and therefore derive from DependencyObject)? Seems a little heavyweight to me, and I'm hoping for a simpler solution.
Thanks, wTs