ウィンドウの位置をBindingで設定しても値の更新が反映されない


Livetを使ってデスクトップアクセサリのようなものを作っているのですが、ViewModel側からウィンドウの位置・サイズを変えたくて以下のような記述をXAMLに書きました。

[code]

    <Window x:Class="LivetWPFApplication1.Views.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
            xmlns:l="http://schemas.livet-mvvm.net/2011/wpf"
            xmlns:vm="clr-namespace:LivetWPFApplication1.ViewModels"
    
            MinWidth="{Binding Width}" MinHeight="{Binding Height}"
            MaxWidth="{Binding Width}" MaxHeight="{Binding Height}"
            Left="{Binding Left}" Top="{Binding Top}">
        ...
    </Window>
    
[/code]

※Top, Left, Width, Heightの各プロパティはlpropスニペットでdouble型で作成しています

これでWidthやHeightは上手くいったのですが、LeftとTopの更新が反映されません。

ViewModelのコンストラクタ内で設定した値は効いているようですが、別途バインドしたコントロールから変更したり、LivetのViewModelテンプレートにある`Initialize()`
内で変更したりしてもウィンドウの位置が変化しません。

（あるいはウィンドウ位置の操作にはMessengerを使うべきなのでしょうか？）




WPFの`Window`ではウィンドウを表示すると`Left`や`Top`などのプロパティのバインディング設定が消えてしまうという現象が発生します。なので添付プロパティ等を使った`Window.Left`にバインドしない実装を使用する必要があります。




WPFの`Window`ではウィンドウを表示すると`Left`や`Top`などのプロパティのバインディング設定が消えてしまうという現象が発生します。なので添付プロパティ等を使った`Window.Left`にバインドしない実装を使用する必要があります。

