我有两个并排的文本框,InputInches
和InputMillimeters
,我想做的是英寸到毫米的转换,类似于Goolge转换的工作方式。我想发生的是,当用户开始在第一个文本框InputInches
中键入内容时,如果用户开始在第二个文本框中输入内容,结果将显示在第二个文本框中(InputMillimeters),反之亦然结果将显示在第一个文本框中。
以下代码完全可以按我的要求很好地进行英寸到毫米的转换,但是如果我取消注释convertMillimetersToInches()
方法中的代码,则会出现错误。
关于如何使用MVVM Light进行这种类型的绑定的任何建议?
XAML:
<TextBox x:Name="textBox1"
Text="{Binding InputInches,UpdateSourceTrigger=PropertyChanged}"/>
<TextBox x:Name="textBox2"
Text="{Binding InputMillimeters,UpdateSourceTrigger=PropertyChanged}"/>
ViewModel:
namespace MyApp.ViewModel
{
public class ConversionViewModel : ViewModelBase
{
private string _inputInches;
private string _inputInchesTrimmed;
private string _inputMillimeters;
private string _inputMillimetersTrimmed;
public ConversionViewModel()
{
}
public string InputInches
{
get { return _inputInches; }
set {
_inputInches = value;
_inputInchesTrimmed = value.Trim();
RaisePropertyChanged();
if (_inputInchesTrimmed == "") {
_inputInchesTrimmed = "0";
}
convertInchesToMillimeters();
}
}
public string InputMillimeters
{
get { return _inputMillimeters; }
set {
_inputMillimeters = value;
_inputMillimetersTrimmed = value.Trim();
RaisePropertyChanged();
if (_inputMillimetersTrimmed == "") {
_inputMillimetersTrimmed = "0";
}
convertMillimetersToInches();
}
}
/// CONVERSION METHODS
private void convertInchesToMillimeters()
{
double millimeters = Convert.ToDouble(_inputInchesTrimmed) * 25.4;
InputMillimeters = Convert.ToString(millimeters);
}
private void convertMillimetersToInches()
{
//double inches = Convert.ToDouble(_inputInchesTrimmed) / 25.4;
//InputInches = Convert.ToString(inches);
}
}
}
错误消息:
确保您没有无限循环或无限递归
答案 0 :(得分:2)
简单答案: 检查您的方法是否等于设置值(与其他方法重复):
private void convertInchesToMillimeters()
{
string millimeters = (Convert.ToDouble(_inputInchesTrimmed) * 25.4).ToString();
if(millimeters != InputMillimeters) InputMillimeters = millimeters;
}
更复杂的答案。仅使用一个属性并实现两个wpf转换器(请参见https://www.wpf-tutorial.com/data-binding/value-conversion-with-ivalueconverter/)