none
Data Binding RRS feed

  • Pergunta

  • Olá pessoal,

     

    Alguém teria algum exemplo de um Data Binding, que associa um TextBox com um Objeto.

    Gostaria que ao ser realizada uma alteração do valor do objeto, o controle fosse atualizado automaticamente.

     

    Tenho um exemplo aqui, mas não funciona corretamente. Veja:

    XAML

    <Window x:Class="LigacaoDados.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:src="LigacaoDados.Window1"
        Title="Ligação de Dados" Height="300" Width="300">
        <Grid>
            <TextBox Name="personNameTextBox" Text="{Binding Path=Name}" />
            <Button Height="23" HorizontalAlignment="Left" Margin="42,0,0,60" Name="button1" VerticalAlignment="Bottom" Width="75" Click="button1_Click">Button</Button>
        </Grid>
    </Window>

    C#

    public partial class Window1 : Window
    {
            public Window1()
            {
                InitializeComponent();
               
                // Create Person data source
                Person person = new Person();

                // Make data source available for binding
                this.DataContext = person;
            }

            private void button1_Click(object sender, RoutedEventArgs e)
            {
                Name = "tchau";
            }
    }

    public class Person
    {
            string name = "ola";

            public string Name
            {
                get { return name; }
                set { name = value; }
            }
    }

     

    O problema deste exemplo está no fato do TextBox não ser atualizado quando o Objeto é atualizado (no evento OnClick do botão). Alguém sabe o que estou fazendo errado?

     

    Agradeço toda ajuda,

    Ewerton.

    sexta-feira, 1 de outubro de 2010 12:23

Respostas

  • Ola Ewerton, o que esta faltando ai eh a implementacao da interface INotifyPropertyChanged.

    Segue um exemplo de como utiliza-la

    http://msdn.microsoft.com/pt-br/library/system.componentmodel.inotifypropertychanged.aspx

    • Marcado como Resposta Ewerton Rubio segunda-feira, 4 de outubro de 2010 14:16
    sexta-feira, 1 de outubro de 2010 20:00
  • Olá Ewerton,
    Segue um exemplo

    XAML
    <Window x:Class="WpfApplication7.MainWindow" Name="MyWindow"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Title="MainWindow" Height="350" Width="525">
     <Grid>
      <StackPanel>
       <TextBox x:Name="txtName" Text="{Binding ElementName=MyWindow, Path=PersonName, Mode=TwoWay}"/>
       <Button Content="Button" Click="Button_Click"/>
      </StackPanel>
     </Grid>
    </Window>
    


    Codebehind
     public partial class MainWindow : Window
     {
      private static readonly DependencyProperty MyNameProperty =
       DependencyProperty.Register("PersonName", typeof(string), typeof(MainWindow));
    
      public string PersonName
      {
       get { return (string)this.GetValue(MyNameProperty); }
       set { this.SetValue(MyNameProperty, value); }
      }
    
      public MainWindow()
      {
       InitializeComponent();
    
       this.PersonName = "Anderson";
      }
    
      private void Button_Click(object sender, RoutedEventArgs e)
      {
       this.PersonName = "Outro valor";
      }
     }
    
    Att.
    Anderson
    • Marcado como Resposta Ewerton Rubio segunda-feira, 4 de outubro de 2010 14:16
    sexta-feira, 1 de outubro de 2010 20:14

Todas as Respostas

  • Ola Ewerton, o que esta faltando ai eh a implementacao da interface INotifyPropertyChanged.

    Segue um exemplo de como utiliza-la

    http://msdn.microsoft.com/pt-br/library/system.componentmodel.inotifypropertychanged.aspx

    • Marcado como Resposta Ewerton Rubio segunda-feira, 4 de outubro de 2010 14:16
    sexta-feira, 1 de outubro de 2010 20:00
  • Olá Ewerton,
    Segue um exemplo

    XAML
    <Window x:Class="WpfApplication7.MainWindow" Name="MyWindow"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      Title="MainWindow" Height="350" Width="525">
     <Grid>
      <StackPanel>
       <TextBox x:Name="txtName" Text="{Binding ElementName=MyWindow, Path=PersonName, Mode=TwoWay}"/>
       <Button Content="Button" Click="Button_Click"/>
      </StackPanel>
     </Grid>
    </Window>
    


    Codebehind
     public partial class MainWindow : Window
     {
      private static readonly DependencyProperty MyNameProperty =
       DependencyProperty.Register("PersonName", typeof(string), typeof(MainWindow));
    
      public string PersonName
      {
       get { return (string)this.GetValue(MyNameProperty); }
       set { this.SetValue(MyNameProperty, value); }
      }
    
      public MainWindow()
      {
       InitializeComponent();
    
       this.PersonName = "Anderson";
      }
    
      private void Button_Click(object sender, RoutedEventArgs e)
      {
       this.PersonName = "Outro valor";
      }
     }
    
    Att.
    Anderson
    • Marcado como Resposta Ewerton Rubio segunda-feira, 4 de outubro de 2010 14:16
    sexta-feira, 1 de outubro de 2010 20:14
  • Olá pessoal,

     

    Obrigado pelas respostas, vou verificar o link do Thiago e implementar o exemplo do Anderson.

    Obs.: Qualquer problema volto a postar aqui. Agradeço a ajuda de vocês!

     

     

    Um abraço,

    Ewerton.

    segunda-feira, 4 de outubro de 2010 13:31