绑定窗口位置不能双向工作

时间:2012-01-27 09:26:56

标签: c# wpf xaml binding

我试图坚持窗口的位置,我有以下XAML(删除了非相关部分)

<Window x:Class="App.MainWindow"
  Title="MainWindow" Name="mainWindow"
  Top="{Binding Source={StaticResource Settings}, Path=Default.PositionY}"
  Left="{Binding Source={StaticResource Settings}, Path=Default.PositionX}"
  AllowsTransparency="True" WindowStyle="None" SizeToContent="WidthAndHeight"
  Background="#01000000" Topmost="{Binding Source={StaticResource Settings}, Path=Default.AlwaysOnTop}"
   MouseLeftButtonDown="mainWindow_MouseLeftButtonDown" 

“设置”在App.xaml中定义并映射到应用设置

Google上的搜索使用我使用的方法提供了几个这样的例子。

TopMost的绑定完全按预期工作,此值在运行之间保持不变 然而,Top和Left的绑定似乎只能单向工作。窗口从设置中正确选取其位置,但移动时,设置不会更新。 我的Settings.Save函数上的断点显示Top和Left属性已按预期更改。在保存之前手动将这些值复制到设置中可以正常工作。 我已经尝试明确指定Mode = TwoWay无效(无论如何应该默认)

PositionX和PositionY都是用户设置,定义为double类型

使用以下鼠标处理程序

完成移动窗口
private void mainWindow_MouseLeftButtonDown(object sender, MouseButtonEventArgs args)
{
  DragMove();
}

为什么双向绑定只能以一种方式运作?

3 个答案:

答案 0 :(得分:2)

嗯,如果没有明确设置TwoWay,它确实无效。我刚试过这个:

Top="{Binding Source={StaticResource Settings}, Path=Default.PositionY, Mode=TwoWay}" 
Left="{Binding Source={StaticResource Settings}, Path=Default.PositionX, Mode=TwoWay}" 

这就是工作。

关于INotifyPropertyChanged:这不是必需的,因为它是另一个绑定方向,即在启动时工作一次的方向。而且在生成的类中实现起来可能很困难。

答案 1 :(得分:1)

ColinE所说的内容:让您正确实现INotofiyPropertyChanged界面。如果您与我们分享您的设置类的代码,将会有所帮助。

但也请确保您指定了绑定模式Mode=TwoWay,这不是您在问题中建议的默认设置。

答案 2 :(得分:0)

为了更新绑定,公开PositionYPositionX属性的对象需要实现INotifyPropertyChanged接口,并在这两个接口时引发PropertyChanged事件属性改变。你没有展示这段代码,但我的猜测是你没有这样做。