Проблема привязки данных в точках WPF - PullRequest
0 голосов
/ 29 января 2011

Я занимаюсь разработкой библиотеки интерактивных диаграмм ... и приложения, которые ее используют.

В приложении у меня есть ListView с Points из CurrentItem.

public Point CurrentPoint
  {
   get { return myCurrentPoint; }
   set
   {
    myCurrentPoint = value;
    base.OnPropertyChanged("CurrentPoint");
   }
  }

На той же панели у меня есть два текстовых поля для редактирования координат точки:

<TextBox Text="{Binding CurrentPoint.X, Mode=TwoWay}" 
       Grid.Column="1" Grid.Row="0" Width="80" Margin="5"/>

Моя большая проблема в том, что Point - это структура ... поэтому она передается по значению.

Если я изменю X координату в текстовом поле ... это не изменит привязку данных Point.

Как я могу решить эту проблему?
Должен ли я написать свой класс Point и класс Line, потому что ее Points PointCollection из Point?

Если нужно, могу выложить больше кода:)

Спасибо.

1 Ответ

1 голос
/ 29 января 2011

Почему бы не создать комбинированный элемент управления, который изменяет точку вместо x-и y-компонента Point. После этого вы можете связать свой Point -свойство, и связывание будет работать как положено. Кроме того, у вас, вероятно, более приятный интерфейс.

Вы можете создать UserControl, добавить два текстовых поля и добавить DependencyProperty- Point к этому элементу управления. Каждый раз, когда изменяется содержимое одного из текстовых полей, присвойте свойству Point новое значение.

public class PointInputBox : UserControl{

  public static readonly DependencyProperty PointProperty =
    DependencyProperty.Register("Point", typeof(Point), typeof(PointInputBox), new FrameworkPropertyMetadata(new Point(0,0),FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));


  public Point Point {
    get { return (Point)GetValue(PointProperty); }
    set { SetValue(PointProperty, value); }
  }

  // Add here event handlers for changes of your input boxes and set 
  //  the Point-value accordingly 
...