绑定窗口位置

时间:2012-01-04 12:29:34

标签: wpf window location

我们尝试绑定窗口位置,但绑定仅在加载窗口时才起作用 (我们确实看到输入的绑定代码)。 有谁知道为什么?

在视图中:

<Window Top="{Binding TopSize}">
   ...
</Window>
在视图模型中

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

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

2 个答案:

答案 0 :(得分:2)

根据 http://social.msdn.microsoft.com/Forums/en-AU/wpf/thread/82ec9358-1f20-452f-8f7a-e067c999f262 这似乎不起作用。如果框架为Window.Top设置了值,则绑定将消失。

您可以做的是实现一个Mediator / Event,它使用正确的值通知Window。然后在窗口中手动设置。

e.g。

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;
  }
}

答案 1 :(得分:0)

假设:

  • 您的计时器不止一次运行,并且不会自行终止。
  • 您的班级正在实施INotifyPropertyChanged。

有趣的代码构造。尝试将其更改为:

public int TopSize
{
  get{return m_topSize;}
  set
  {
    if (m_topSize!=value)
      m_topSize = value;
    NotifyPropertychanged("TopSize");  
  }
}
private onTimer()
{
  TopSize += 5;
}