Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文本框中的用户输入覆盖数据绑定_C#_Wpf_Data Binding_Command - Fatal编程技术网

C# 文本框中的用户输入覆盖数据绑定

C# 文本框中的用户输入覆盖数据绑定,c#,wpf,data-binding,command,C#,Wpf,Data Binding,Command,我有一个从doubleCLR属性到Texttbox.Text的工作one-way数据绑定。我不使用two-way,因为不是每个用户输入都是可接受的。顺便说一句,我使用一个现有的命令,该命令执行ICommand接口 问题一旦用户在文本框中键入文本,数据绑定就会被销毁 <TextBox Text="{Binding Path=myDouble, Converter={converter:DoubleToTextConverter}, Mode=OneWay, UpdateSourceTrigg

我有一个从double
CLR属性到
Texttbox.Text的工作
one-way
数据绑定。
我不使用
two-way
,因为不是每个用户输入都是可接受的。顺便说一句,我使用一个现有的
命令
,该命令执行
ICommand
接口

问题一旦用户在
文本框中键入文本
数据绑定
就会被销毁

<TextBox Text="{Binding Path=myDouble, Converter={converter:DoubleToTextConverter}, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>

如果您不告诉用户,您的程序如何知道用户输入是否可以接受?
要检查用户输入,可以执行以下操作:

  • 用于仅接受某些输入
  • 创建第二个文本框,用户在其中进行输入,如果没有问题(在ViewModel中进行检查),则将其应用于第一个文本框的绑定属性
    myDouble

你所说的“毁灭”是什么意思?用户输入将至少覆盖源属性值,直到源通过另一种方式再次更新,这是预期的行为。
ICommand
与此有什么关系?此外,如果不是每个用户输入都有效,则在属性
setter
?@Pragmateek中使用一种形式或忽略应用新的
值,并使用“destromed”,我的意思是,当源属性更新时,文本框中的文本不会更新。(在用户更改文本之前,它确实工作得非常好)@Viv。该命令已在程序中使用多次。我只是为用户添加了一种新的使用方法。因此,我有一个测试输入的CanExecute函数。如果在viewmodel中使用带有双向绑定的字符串属性,使用idataerrorinfo验证输入,并在将值设置为模型时将其转换为double(这样,您也可以摆脱转换器),那么会更容易。单向模式绑定是“只读”的,因此您可以从源代码更新文本。我的程序知道该值是否可以接受。ICommand有一个
boolcanexecute(对象参数){…}
方法。因此,如果值不正确,“使用”命令的按钮在输入不可行时不可用。我的问题是谁让数据绑定工作,而不是输入验证。这不会按照你想要的方式工作。但您可以使用标签显示值(绑定模式=单向),并使用文本框让用户在其中键入值(绑定模式=单向源)。