расположение окна привязки - PullRequest
0 голосов
/ 04 января 2012

Мы пытаемся привязать расположение окна, но привязка работает только один раз при загрузке окна (мы видим введенный код привязки). Кто-нибудь знает почему?

в поле зрения:

<Window Top="{Binding TopSize}">
   ...
</Window>

в представлении модель:

public int TopSize
{
   get{return m_topSize;}
   set{m_topSize=value;}
}

private onTimer()
{
   m_topSize+=5;
   NotifyPropertychanged("TopSize");
}

Ответы [ 2 ]

2 голосов
/ 04 января 2012

Согласно http://social.msdn.microsoft.com/Forums/en-AU/wpf/thread/82ec9358-1f20-452f-8f7a-e067c999f262 Это не похоже на работу.Если значение для Window.Top установлено в Framework, ваша привязка исчезнет.

Что вы можете сделать, это реализовать посредник / событие, которое уведомляет Window с правильным значением.Затем установите его вручную в окне.

например

public MainWindow()
{
  InitializeComponent();

  // create ViewModel and register for PropertyChanged
  var viewModel = new ViewModel();
  viewModel.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(viewModel_PropertyChanged);
  this.DataContext = viewModel;
}

void viewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
  // if topsize was changed set view accordingly
  if (e.PropertyName == "TopSize")
  {
    this.Top = ((ViewModel) this.DataContext).TopSize;
  }
}
0 голосов
/ 04 января 2012

Предполагая, что:

  • Ваш таймер запускается более одного раза и не прерывается самостоятельно.
  • Ваш класс реализует INotifyPropertyChanged.

Интерескодовая конструкция.Попробуйте изменить его на:

public int TopSize
{
  get{return m_topSize;}
  set
  {
    if (m_topSize!=value)
      m_topSize = value;
    NotifyPropertychanged("TopSize");  
  }
}
private onTimer()
{
  TopSize += 5;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...