0

ボタンがクリックされたときにテキストボックスのテキストをパラメーターとして受け取るようにボタンコマンドをバインドしようとしています。私の 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") に置き換えると、期待どおりの値が得られます。バインディング側で何が欠けていますか?

4

1 に答える 1

3

OnPropertyChanged の実装で何か特別なことが行われている場合を除き、次のことが原因である可能性があります。

OnPropertyChanged(MessageText);

これでなければなりません:

OnPropertyChanged("MessageText");

お役に立てれば。

于 2009-10-06T19:19:02.987 に答える