のんのんびりびりプログラマー

のんびりプログラム関係を書いています。また日々思った事を思った時に。

【WPF小技集】Windowの画面サイズのBinding方法

WindowサイズをBindingしようとするとまず陥ってしまいます。

たぶんこんな感じに普通に書いているんじゃないでしょうか。

ChatView.xaml

<Window x:Class="ChatBot.View.ChatView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ChatBot.View"
        mc:Ignorable="d"
        Height="{Binding Path=Size.WindowHeight}"
        Width="{Binding Path=Size.WindowWidth}"
        Title="ChatView">

正しくBindingしていますが、
デバッグをすると反映されない。

Mode=TwoWay

が抜けているんです。

<Window x:Class="ChatBot.View.ChatView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ChatBot.View"
        mc:Ignorable="d"
        Height="{Binding Path=Size.WindowHeight, Mode=TwoWay}"
        Width="{Binding Path=Size.WindowWidth, Mode=TwoWay}"
        Title="ChatView">
Mode=TwoWay

View→ViewModel、ViewModel→Viewの双方向でBindingをすると
明示的に書くことになります。

Modeは
"Default"、"OneTime"、"OneWay"、"OneWayToSource"、"TwoWay"
があります。

OneTime :ViewModel→Viewに一度だけ一方向にBinding
OneWay :ViewModel→Viewの一方向にBinding
OneWayToSource:View→ViewModelの一方向にBinding
TwoWay :ViewModel→View、View→ViewModelの双方向でBinding

どのModeを選ぶからその時々で考えてください。
基本的にTwoWayであればBindingします。