Как определить свойство зависимости как ссылочный тип? - PullRequest
1 голос
/ 11 декабря 2011

У меня есть пользовательский элемент управления, в котором мой пользовательский элемент управления имеет DependencyProperty в качестве типа ссылки, например Person

public static readonly DependencyProperty MyPesonProperty =
    DependencyProperty.Register("Peson", typeof(Person), typeof(MyUserControl),
       new FrameworkPropertyMetadata
       {
           BindsTwoWayByDefault = true

       });

public Person MyPeson
{
   get { return (Person)GetValue(MyPesonProperty ); }
   set { 
            SetValue(MyPesonProperty , value);
       }
}

public MyUserControl()
{
        InitializeComponent();
        MyPeson= new Person();
}

public ChangePerson()
{
        MyPeson.FistName="B";
        MyPeson.LastName="BB";
}

когда я вызываю ChangePerson() У меня есть исключение нулевой ссылки для свойства MyPerson, но я создаю новый экземпляр из него в конструкторе.

1 Ответ

1 голос
/ 09 февраля 2012

У меня нет проблем с вашим кодом.это работает.

public partial class Window8 : Window
{
  public static readonly DependencyProperty MyPersonProperty =
    DependencyProperty.Register("MyPerson",
                                typeof(Person),
                                typeof(Window8),
                                new FrameworkPropertyMetadata(null, new PropertyChangedCallback(MyPersonPropertyChangedCallback)) {BindsTwoWayByDefault = true});

  private static void MyPersonPropertyChangedCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) {
    if (e.NewValue == null) {
      // ups, why is this null???
    }
  }

  public Person MyPerson {
    get { return (Person)this.GetValue(MyPersonProperty); }
    set { this.SetValue(MyPersonProperty, value); }
  }

  public Window8() {
    this.InitializeComponent();
    this.MyPerson = new Person();
  }

  private void Button_Click(object sender, RoutedEventArgs e) {
    // do something....
    this.MyPerson.FistName = "B";
    this.MyPerson.LastName = "BB";
  }
}

теперь, что вы можете сделать?

попробуйте отладку и установите точку останова на MyPersonPropertyChangedCallback и посмотрите, что произойдет.

проверьте вашу привязку кMyPerson, возможно, для привязки было установлено значение null (выпадающий список, выбранный элемент = null?)

надеюсь, это поможет вам ...

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