【问题标题】:Why isn't my command parameter binding correctly?为什么我的命令参数绑定不正确?
【发布时间】:2009-10-06 18:56:20
【问题描述】:

我正在尝试绑定一个按钮命令,以便在单击按钮时将文本框的文本作为参数。我的 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”每次都为空。如果我将绑定语句 commands:Click.CommandParameter="{Binding Path=MessageText}" 替换为一些硬编码值(如在 commands:Click.CommandParameter="Foo" 中),我会得到预期的值。我在绑定方面缺少什么?

【问题讨论】:

    标签: silverlight prism delegatecommand


    【解决方案1】:

    除非你对你的 OnPropertyChanged 实现有什么特别的想法,否则很可能是因为:

    OnPropertyChanged(MessageText);
    

    应该是这样的:

    OnPropertyChanged("MessageText");
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-29
      • 1970-01-01
      • 2013-10-07
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 2015-09-08
      相关资源
      最近更新 更多