Silverlight Binding Textbox Text property to public property of UserControl Problem

silverlight

I have a user control which implements INotifyPropertyChanged and has a property SelectedTopicDescription and I am trying to bind a textbox Text property to this public property. I know the property is changing however the textbox is not being updated.

I have tried a number of things and I know this should be easy.

I have tried using the following datacontext within the UserControl xaml but it had no effect. I have read about dependency properities but shouldn't i be able to do this by using INotifyPropertyChanged?

Your help is appreciated.

DataContext="{Binding RelativeSource={RelativeSource Self}}"

public partial class CodePage : UserControl  ,INotifyPropertyChanged{

    private string _selectedTopicDescription = string.Empty;
    public string SelectedTopicDescription {
        get { return _selectedTopicDescription; }
        set { 
            _selectedTopicDescription = value; 
            OnPropertyChanged("SelectedTopicDescription"); 
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string property) {
        PropertyChangedEventHandler ph = this.PropertyChanged;
        if (ph != null)
            ph(this, new PropertyChangedEventArgs(property));
    }

The textbox is..

Width="200" Margin="141,142,0,153"
Text="{Binding SelectedTopicDescription}"
HorizontalAlignment="Left">

Best Answer

It's probably not a good idea to fiddle around with DataContext when binding elements in a Usercontrol with properties of the that UserControl. Instead direct the binding to the UserControl via the ElementName property of Binding, like this:-

<TextBox Text="{Binding Parent.SelectedTopicDescription, ElementName=LayoutRoot, Mode=TwoWay}" />

This uses the fact that the Content element in the user control is has the name "LayoutRoot" and that in turn being a FrameworkElement has a Parent property which will be the UserControl.

Related Topic