Привязать к собственности - PullRequest
       0

Привязать к собственности

0 голосов
/ 21 сентября 2010

У меня есть объект (класс): Foo.

Имеет свойство: Bar.

Что я должен сделать, чтобы иметь возможность привязки к этому свойству Bar? 1008 *

(WPF, .NET 4)

РЕДАКТИРОВАТЬ:

Чтобы быть более точным, я приведу пример:

У меня есть Dot:UserControl

Я создаю 2 свойства Dot - CenterX и CenterY:

    public double CenterX
    {
        get
        {
            return Canvas.GetLeft(this) + this.Width / 2;
        }
        set
        {
            Canvas.SetLeft(this, value - this.Width / 2);
        }
    }

    public double CenterY
    {
        get
        {
            return Canvas.GetTop(this) + this.Height / 2;
        }
        set
        {
            Canvas.SetLeft(this, value - this.Height / 2);
        }
    }

Сейчас:

<Line Stroke="Black" x:Name="line1"
      X1="{Binding ElementName=dot1, Path=CenterX}"
      Y1="{Binding ElementName=dot1, Path=CenterY}"

      X2="{Binding ElementName=dot2, Path=CenterX}"
      Y2="{Binding ElementName=dot2, Path=CenterY}" />

не работает ...

Ответы [ 2 ]

1 голос
/ 21 сентября 2010

Реализуйте INotifyPropertyChanged для вашего класса, чтобы инфраструктура привязки WPF узнала об обновлении соответствующих связанных элементов управления при изменении свойства.

Для фактической привязки вы можете найти это полезным

http://japikse.blogspot.com/2009/07/inotifypropertychanged-and-wpf.html

С INotifyPropertyChanged ваш класс будет выглядеть как

 public class Foo:INotifyPropertyChanged
    {
        public double CenterX
        {
            get
            {
                return Canvas.GetLeft(this) + this.Width / 2;
            }
            set
            {
                Canvas.SetLeft(this, value - this.Width / 2);
                OnPropertyChanged("CenterX");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged = delegate { };

        private void OnPropertyChanged(string propertyName)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

В любое время значение CenterX изменяется, OnPropertyChanged («CenterX»); скажет пользовательскому интерфейсу обновить элементы управления, к которым привязаны свойства

0 голосов
/ 21 сентября 2010

Ваш вопрос недостаточно точен, чтобы ответить на него полностью ... Если не указано иное, пути привязки всегда относятся к DataContext элемента управления.Предполагая, что ваш DataContext является экземпляром Foo, вы можете сделать это:

<TextBlock Text="{Binding Bar}" />

Или, если вы хотите быть более явным:

<TextBlock Text="{Binding Path=Bar}" />

Теперь, если Foo само по себе является свойством текущего DataContext, вы можете сделать это:

<TextBlock Text="{Binding Foo.Bar}" />

Посмотрите на этот Обязательный шпаргалку , это очень полезно, когда вы новичок вWPF переплет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...