WPF View не рендерится при изменении связанного свойства contentControl - PullRequest
1 голос
/ 06 июля 2011

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

XMAL:

<ContentControl Grid.Row="0" Content="{Binding MainContent, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"></ContentControl>

ИМУЩЕСТВО:

private UserControl _mainContent;
public UserControl MainContent
{
  get
  {
    return _mainContent;
  }
  set
  {
    _mainContent = value;
    OnPropertyChanged();
  }
}

КОДЗАД:

MainContent = new TestUserControl();

НА ИМУЩЕСТВЕ ИЗМЕНЕНО:

    public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)
{
  if (this.PropertyChanged != null)
  {
    this.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
  }
}

protected virtual void OnPropertyChanged()
{
  string propertyName = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod().Name.Substring(4);
  OnPropertyChanged(propertyName);
}

Моя проблема заключается в том, что на одном конкретном тестовом компьютере (похожем на другие, в этом нет ничего уникального или странного. Windows 7, 4 ГБ ОЗУи т. д.), при изменении пользовательских контролов с использованием этого механизма приложение зависает.

Глядя на мои журналы, получена команда Изменить, создан новый пользовательский элемент управления, запускается конструктор.Свойство Main Content установлено, событие OnPropertyChanged вызывает

, а затем ничего.Приложение зависает, и Windows сообщает, что оно не отвечает, и закрывает приложение.

Событие OnLoaded пользовательского элемента управления никогда не запускается.

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

Идеи, комментарии приветствуются.Идея, как отладить этот, приветствуется.

ОБНОВЛЕНИЕ: Поскольку это тестовая машина, она не очень часто перезагружается.

После того, как мы перезагрузили машину, проблемаушел. Я все еще хотел бы знать, почему и как остановить это снова.

PS.Платформа Target - x86, а проблемный компьютер - x64, но в другом окне 7 x64 проблем не было.Мы используем .net Framework 4.0

1 Ответ

1 голос
/ 16 декабря 2011

Я столкнулся с этим однажды, это было вызвано тем, что я использовал:

protected virtual void OnPropertyChanged()
{
  string propertyName = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod().Name.Substring(4);
  OnPropertyChanged(propertyName);
}

Ваши свойства встроены в режиме выпуска (и, возможно, во время компиляции), поэтому имя свойства не было правильно определено при поиске в стеке ...

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