我正在尝试绑定按钮命令,以便在单击按钮时将文本框的文本作为参数。我的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"
中),我会得到预期的值。我在绑定方面缺少什么?
答案 0 :(得分:3)
除非您真的想要使用OnPropertyChanged实现,否则很可能是因为:
OnPropertyChanged(MessageText);
应该是这样的:
OnPropertyChanged("MessageText");
希望这有帮助。