Question

i have a textbox in a UserControl, i created a property in the UserControl, i want to bind the textbox text property to the property created in the usercontrol.

The problem is that i dont know how to especify the datacontext to the current class in XAML.

Any idea?? thanks

Was it helpful?

Solution

This will get what you enter in your textbox to your property in the codebehind. Depending on the size of your project I'd consider MVVM to push the code out to the ViewModel, then in the UserControl you'd specify this.DataContext = an instance of your ViewModel.

Xaml:

<UserControl x:Class="SilverlightApplication1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <StackPanel>

        <TextBox Text="{Binding Foo,Mode=TwoWay}"/>

        <Button Content="Click" Click="Button_Click"/>

    </StackPanel>

</UserControl>

Code Behind:

 public partial class MainPage : UserControl
 {
    public string Foo { get; set; }

    public MainPage ()
    {
      InitializeComponent();
      this.DataContext = this;
    }
 }

OTHER TIPS

I would create the binding in code. Assume your TextBox has x:Name="MyTextBox" also assume you've added a dependency property (or at least a standard property with INotifyPropertyChanged implementation) called on MyText on your user control.

  public partial class MainPage : UserControl
  {
   public MainPage ()
   {
     InitializeComponent();
     Binding binding = new Binding("MyText");
     binding.Mode = BindingMode.TwoWay;
     binding.Source = this;
     MyText.SetBinding(TextBox.TextProperty, binding);
   }
 }

This leaves the UserControl's DataContext property open for other more typical uses.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top