none
Como fazer Binding atraves de propriedades ??? RRS feed

  • Pergunta


  • Olá amigos, gostaria de saber como posso fazer Binding atraves de propriedades nos controles ...

    Exemplo:

        public DateTime DateNow
        {
          get {
            return DateTime.Now;
          }
        }

    <TextBlock HorizontalAlignment="Right" Text="{Binding Path=TimeSheet.Window1.DateNow}" />

    isso aqui não funcionou ...

    abraços
    sexta-feira, 15 de fevereiro de 2008 12:33

Respostas

  • Uma maneira é definir o RelativeSource:

      <TextBlock Text="{Binding Path=DateNow, UpdateSourceTrigger=PropertyChanged,
        RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" />

    Mas isso não atualiza a caixa de texto quando a propriedade muda. O melhor é criar uma DependencyProperty, assim:

            public DateTime DateNow
            {

                get { return (DateTime)GetValue(DateNowProperty); }

                set { SetValue(DateNowProperty, value); }

            }

            public static readonly DependencyProperty DateNowProperty =

                DependencyProperty.Register("DateNow", typeof(DateTime), typeof(Window1));



    Assim, quando a propriedade mudar, o texto muda:

            public Window1()
            {
                DateNow = DateTime.Now;
                InitializeComponent();
                DispatcherTimer timer = new DispatcherTimer();
                timer.Interval = new TimeSpan(500);
                timer.Tick += new EventHandler(timer_Tick);
                timer.IsEnabled = true;
             }

            void timer_Tick(object sender, EventArgs e)
            {
                DateNow = DateTime.Now;
            }


    Bruno
    sexta-feira, 15 de fevereiro de 2008 21:22