ボタンがクリックされたときにテキストボックスのテキストをパラメーターとして受け取るようにボタンコマンドをバインドしようとしています。私の Xaml は次のようになります。
<TextBox x:Name="InputBox" Width="250" TabIndex="1"
Text="{Binding Path=MessageText, Mode=TwoWay}"
FontFamily="Verdana" FontSize="11" Margin="0,0,4,0" />
<Button x:Name="SendButton" Width="50" Content="Send" TabIndex="2"
commands:Click.CommandParameter="{Binding Path=MessageText}"
commands:Click.Command="{Binding SendMessageCommand}" />
MessageText は次のように定義されています。
private string mMessageText;
public string MessageText
{
get { return mMessageText; }
set { mMessageText = value; OnPropertyChanged(MessageText); }
}
そして、私の DelegateCommand は次のようになります。
public ICommand SendMessageCommand { get; private set; }
public TestModuleViewModel()
{
Messages = new ObservableCollection<Message>();
this.SendMessageCommand = new DelegateCommand<string>(text =>
{
Messages.Add(CreateMessage(text, "Me"));
});
}
デリゲートにブレークポイントを設定してこれを実行しましたが、パラメーター 'text' は毎回 null になります。バインド ステートメント commands:Click.CommandParameter="{Binding Path=MessageText}"
をハード コードされた値 (のようにcommands:Click.CommandParameter="Foo"
) に置き換えると、期待どおりの値が得られます。バインディング側で何が欠けていますか?