मैं TextBox
double
UpdateSourceTrigger=PropertyChanged
के साथ कुछ ऑब्जेक्ट की संपत्ति को बांधने की कोशिश कर रहा हूं। लक्ष्य स्वीकार्य सीमा में होने के लिए मान्य प्रवेश मूल्य के संपादन के दौरान तुरंत है (और यदि कोई त्रुटि नहीं है)। मैं मॉडल स्तर पर सत्यापन लागू करना चाहता हूं, यानी IDataErrorInfo
के माध्यम से।सत्यापन के साथ डबल फ़ील्ड को बाध्यकारी
जब मैं int संपत्ति से जुड़ता हूं तो सभी महान काम करते हैं, लेकिन अगर संपत्ति दोगुना हो तो निराशाजनक संपादन व्यवहार प्रकट होता है: संख्या के आंशिक भाग में अंतिम महत्वपूर्ण अंक को मिटाने के बाद - दशमलव विभाजक स्वचालित रूप से मिटा दिया जाता है (सभी संभावित fractional शून्यों के साथ) । उदाहरण के लिए, '12 .03 'संख्या से अंक' 3 'को मिटाने के बाद पाठ को '12 .0' के बजाय '12' में बदल दिया गया है।
कृपया, सहायता करें।
MainWindow.xaml:
<Window x:Class="BindWithValidation.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="80" Width="200" WindowStartupLocation="CenterOwner">
<StackPanel>
<TextBox Width="100" Margin="10" Text="{Binding DoubleField, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}">
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</StackPanel>
</Window>
MainWindow.xaml.cs:
namespace BindWithValidation
{
public partial class MainWindow : Window
{
private UISimpleData _uiData = new UISimpleData();
public MainWindow()
{
InitializeComponent();
DataContext = _uiData;
}
}
}
UISimpleData.cs:
namespace BindWithValidation
{
public class UISimpleData : INotifyPropertyChanged, IDataErrorInfo
{
private double _doubleField = 12.03;
public double DoubleField
{
get
{
return _doubleField;
}
set
{
if (_doubleField == value)
return;
_doubleField = value;
RaisePropertyChanged("DoubleField");
}
}
public string this[string propertyName]
{
get
{
string validationResult = null;
switch (propertyName)
{
case "DoubleField":
{
if (DoubleField < 2 || DoubleField > 5)
validationResult = "DoubleField is out of range";
break;
}
default:
throw new ApplicationException("Unknown Property being validated on UIData");
}
return validationResult;
}
}
public string Error { get { return "not implemented"; } }
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string property)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
मुझे लगता है कि यह फ़ॉर्मेटिंग के साथ करना है - क्योंकि 12 12.00 के बराबर है, क्या आपने बाध्यकारी पर स्ट्रिंगफॉर्मेट का उपयोग करने का प्रयास किया है? – Charleh
हां, मैंने कोशिश की है, लेकिन यह पसंद नहीं है कि संपादन इसके साथ कैसे काम करता है। स्ट्रिंगफॉर्मेट प्रस्तुत करने के लिए अच्छा है, लेकिन संपादन के दौरान मैं इससे बचना चाहता हूं। – arudoy