C# 无法使用CommandParameter更新字符串属性
我的应用程序使用自定义数字键盘填充文本框。这是我的xamlC# 无法使用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
<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参数中传递这个类。现在它正在“工作”
如果有人能找到一种直接使用字符串的方法,我将不胜感激,但现在只感谢所有人的回答。您需要执行以下操作:
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
}
}