C# 无法使用CommandParameter更新字符串属性

C# 无法使用CommandParameter更新字符串属性,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我的应用程序使用自定义数字键盘填充文本框。这是我的xaml <TextBox x:Name="myTextBox" Text="{Binding MyText}"> <TextBox.InputBindings> <MouseBinding MouseAction="LeftClick" Command="{Binding KeyPad}" CommandParameter="{Binding MyText}"/> </T

我的应用程序使用自定义数字键盘填充文本框。这是我的xaml

<TextBox x:Name="myTextBox" Text="{Binding MyText}">
    <TextBox.InputBindings>
        <MouseBinding MouseAction="LeftClick" Command="{Binding KeyPad}" CommandParameter="{Binding MyText}"/>
    </TextBox.InputBindings>
</TextBox>
KeyPad_回调函数调用KeyPad窗口,INotifyPropertyChanged被实现,其他一切的View-ViewModel通信工作正常

我的问题是文本框没有更新。如果更改CommandParameter以绑定ElementName:

<MouseBinding MouseAction="LeftClick" Command="{Binding KeyPad}" CommandParameter="{Binding ElementName=myTextBox}"/>
编辑-解决方案 根据这个

问题在于字符串的工作方式。类包装器可以解决这个问题

因此,我创建了一个简单的
字段
类,这样我就可以对字段的标签和文本框字符串进行分组,并在CommandParameter参数中传递这个类。现在它正在“工作”


如果有人能找到一种直接使用字符串的方法,我将不胜感激,但现在只感谢所有人的回答。

您需要执行以下操作:

  • 您的ViewModel应该继承INotifyPropertyChanged或BindableBase,我看到您这样做是因为这一行
    SetProperty(ref\u myText,value)
  • Text=“{Binding MyText}”
    应更改为
    Text=“{Binding MyText,UpdateSourceTrigger=PropertyChanged}”

  • 如果您需要双向绑定,那么它应该是
    Text=“{Binding MyText,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}”


  • 阅读Kevin Cook的反馈。

    您有一个命令参数,但您的RelayCommand未设置为接受参数。您不应该创建一个RelayCommand()以便将参数MyText传递给函数吗?RelayCommand的execute参数是Action。小键盘回调(对象参数)函数可以很好地获取MyText。@RodrigoMartins您能给我们展示一下小键盘回调的代码吗?我想知道它到底在做什么。为什么要将MyText属性的值作为命令参数传递?您可以在定义命令的同一视图模型中访问此属性…mm8代码只是我代码的简化版本。视图就像一个表单,有更多使用该结构的文本框。所以我必须通过它才能知道哪一个会被修改。这是一个很好的实践,但与本例中更新目标的源代码无关。3.在WPF中,默认情况下,该属性上的任何绑定都是双向的。解释,但不要solves@RodrigoMartins在看了这个链接之后,我想我知道了你想要实现什么-在你的
    KeyPad\u回调中(对象参数)
    将一些字符串分配给
    参数
    ,并期望通过
    命令参数
    绑定将分配的值填充回
    MyText
    属性。如果是这样的话,恐怕不可能。
    <MouseBinding MouseAction="LeftClick" Command="{Binding KeyPad}" CommandParameter="{Binding ElementName=myTextBox}"/>
    
        private void KeyPad_Callback(object parameter) 
        {
            var keyPad = new NumKeyPad(parameter) // It's a window class that receives a string as argument 
            var retVal = keyPad.ShowDialog();
            if(retval == true)
            {
                parameter = keyPad.Result; //Result is a string Property
            }
        }