डब्ल्यूपीएफ में संख्यात्मक डेटा प्रविष्टि

आप wpf अनुप्रयोगों में संख्यात्मक मानों की प्रविष्टि को कैसे प्रबंधित कर रहे हैं?

न्यूमेरिक अपडाउन कंट्रोल के बिना, मैं टेक्स्टबॉक्स का उपयोग कर रहा हूं और इसके पूर्वावलोकनकेडडाउन ईवेंट को नीचे दिए गए कोड के साथ संभाला है, लेकिन यह बहुत बदसूरत है।

क्या किसी को तीसरे पक्ष के नियंत्रण पर भरोसा किए बिना उपयोगकर्ता से संख्यात्मक डेटा प्राप्त करने का एक और अधिक शानदार तरीका मिला है?

private void NumericEditPreviewKeyDown(object sender, KeyEventArgs e)
{
    bool isNumPadNumeric = (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) || e.Key == Key.Decimal;
    bool isNumeric = (e.Key >= Key.D0 && e.Key <= Key.D9) || e.Key == Key.OemPeriod;

    if ((isNumeric || isNumPadNumeric) && Keyboard.Modifiers != ModifierKeys.None)
    {
        e.Handled = true;
        return;
    }

    bool isControl = ((Keyboard.Modifiers != ModifierKeys.None && Keyboard.Modifiers != ModifierKeys.Shift)
        || e.Key == Key.Back || e.Key == Key.Delete || e.Key == Key.Insert
        || e.Key == Key.Down || e.Key == Key.Left || e.Key == Key.Right || e.Key == Key.Up
        || e.Key == Key.Tab
        || e.Key == Key.PageDown || e.Key == Key.PageUp
        || e.Key == Key.Enter || e.Key == Key.Return || e.Key == Key.Escape
        || e.Key == Key.Home || e.Key == Key.End);

    e.Handled = !isControl && !isNumeric && !isNumPadNumeric;
}
0
ro fr bn

16 उत्तर

मुझे पागल कहो, लेकिन टेक्स्टबॉक्स नियंत्रण के दोनों तरफ प्लस और माइनस बटन क्यों न रखें और टेक्स्टबॉक्स को कर्सर फोकस प्राप्त करने से रोकें, जिससे आप अपना खुद का सस्ता न्यूमेरिक अपडाउन नियंत्रण बना सकें?

0
जोड़ा
मुझे विश्वास नहीं है कि मैं 2 साल से अधिक इस प्रतिक्रिया का बचाव कर रहा हूं, लेकिन प्रवेश की गति के साथ इसका कोई लेना-देना नहीं है - मूल पोस्टर एक न्यूमेरिक अपडाउन टेक्स्टबॉक्स चाहता था और यह उस परिदृश्य के लिए काम करेगा। उन्होंने गति के बारे में कुछ भी नहीं कहा। यदि आप 8080 चाहते थे, तो आप टैब पर हिट करेंगे और कीबोर्ड पर 8080 टाइप करेंगे; वास्तव में एक बड़ा सौदा नहीं है। मैं किसी के दिमाग की चिंता करता हूं जो वास्तव में सोचता है कि मैं कह रहा था कि हजारों बार प्लस बटन पर क्लिक करना एक अच्छा समाधान था।
जोड़ा लेखक tags2k, स्रोत
डेटा प्रविष्टि की गति। हमारे पास डेटा प्रविष्टि ऑपरेटर हैं जो कुंजीपटल (और अक्सर केवल संख्यात्मक कीपैड) का उपयोग करने में डेटा को हथियार देते हैं, इसलिए उनके लिए एंट्री स्क्रीन के माध्यम से माउस आधा रास्ते तक पहुंचने के लिए अव्यवहारिक होता है।
जोड़ा लेखक Matt Hamilton, स्रोत
@ ग्रेग, मैं टैग 2k की टिप्पणी से सहमत हूं, एनयूडी नियंत्रणों का उचित उपयोग करते समय प्रभावी उपयोग होता है, जैसे ऑर्डर एंट्री जहां डिफ़ॉल्ट क्यूटी 1 हो सकती है, लेकिन उपयोगकर्ता अधिक ऑर्डर करने का विकल्प चुन सकता है। एनयूडी का उपयोग करने का निर्णय लेने पर दो प्रश्न आते हैं, 1) क्या उपयोगकर्ता के पास माउस पर अपना हाथ होगा, 2) ज्यादातर मामलों में कोई बदलाव नहीं होने की संभावना है या केवल कुछ वृद्धि / कमी हो सकती है।
जोड़ा लेखक Brett Ryan, स्रोत
उस स्थिति में, अपना खुद का उपयोग करने योग्य एनयूडी नियंत्रण लिखें और अपने ऐप में इसका इस्तेमाल करें!
जोड़ा लेखक RQDQ, स्रोत
4 अंकों का पिन दर्ज करने में कितना समय लगेगा? या खातों के बीच एक बड़ी राशि स्थानांतरित करें? या दो बड़ी संख्या जोड़ें? या पोर्ट नंबर 8080 पर सेट करें? खराब।
जोड़ा लेखक Greg Sansom, स्रोत
तुम पागल हो। :)
जोड़ा लेखक F.D.Castel, स्रोत

यदि उपयोगकर्ता इसका उपयोग करने से पहले डेटा करते हैं तो आप डेटा सत्यापन का उपयोग करने का भी प्रयास कर सकते हैं। जो मैंने पाया वह कुंजी के साथ झुकाव से काफी सरल और साफ था।

अन्यथा, आप हमेशा पेस्ट अक्षम भी कर सकते हैं!

0
जोड़ा
हाँ मैं निश्चित रूप से वैसे भी मान्य हो जाएगा। मैं बस उपयोगकर्ता को जितनी ज्यादा हो सके गलतियों को करने में सक्षम होने से रोकना चाहता हूं, ताकि कोई भी मौका न हो कि उन्हें एक त्रुटि पॉपअप दिखाई दे।
जोड़ा लेखक Matt Hamilton, स्रोत

कैसा रहेगा:

protected override void OnPreviewTextInput(System.Windows.Input.TextCompositionEventArgs e)
{
    e.Handled = !AreAllValidNumericChars(e.Text);
    base.OnPreviewTextInput(e);
}

private bool AreAllValidNumericChars(string str)
{
    foreach(char c in str)
    {
        if(!Char.IsNumber(c)) return false;
    }

    return true;
}
0
जोड़ा
मुझे अभी एहसास हुआ कि न तो दृष्टिकोण उपयोगकर्ता को गैर-संख्यात्मक पात्रों को नियंत्रण में चिपकाने से रोक देगा, लेकिन अभी यह एक बड़ा मुद्दा नहीं है। मैं आपकी प्रतिक्रिया को उत्तर के रूप में चिह्नित करूंगा 'कोज़ यह उतना करीब है जितना हम प्राप्त कर सकते हैं, मुझे लगता है। धन्यवाद!
जोड़ा लेखक Matt Hamilton, स्रोत
यह मेरे दृष्टिकोण से बेहतर है कि यह कम कोड है और अभी भी तीर कुंजी और बैकस्पेस इत्यादि जैसे नियंत्रण कुंजी की अनुमति देता है।
जोड़ा लेखक Matt Hamilton, स्रोत
डबल क्यों नहीं। ट्राईपर्स?
जोड़ा लेखक Louis Rhys, स्रोत
यह दशमलव पर असफल हो जाएगा। यदि उपयोगकर्ता 5.3 में प्रवेश करता है। यह नकारात्मक संख्याओं पर भी असफल होगा क्योंकि "-" एक संख्या नहीं है। ठीक करने में आसान लेकिन मैंने सोचा कि मैं वहां उस सावधानी को फेंक दूंगा।
जोड़ा लेखक Kelly, स्रोत
बाध्यकारी सत्यापन का उपयोग करने के रूप में उतना अच्छा नहीं है।
जोड़ा लेखक Eric, स्रोत
e.Handled =! e.Text.ToCharArray ()। सभी (सी => Char.IsNumber (सी));
जोड़ा लेखक si618, स्रोत
मैं जुआनगुई के उत्तर की अनुशंसा करता हूं क्योंकि यह गैर-संख्यात्मक डेटा में चिपकने से संबंधित है stackoverflow.com/a/2673131/755404
जोड़ा लेखक Darren, स्रोत
e.Handled =! e.Text.All (Char.IsNumber);
जोड़ा लेखक Olson.dev, स्रोत

यह मेरा इसे करने का तरीका है। यह जांचने के लिए नियमित अभिव्यक्ति का उपयोग करता है कि बॉक्स में मौजूद पाठ संख्यात्मक है या नहीं।

Regex NumEx = new Regex(@"^-?\d*\.?\d*$");

private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
    if (sender is TextBox)
    {
        string text = (sender as TextBox).Text + e.Text;
        e.Handled = !NumEx.IsMatch(text);
    }
    else
        throw new NotImplementedException("TextBox_PreviewTextInput Can only Handle TextBoxes");
}

डब्ल्यूपीएफ और सिल्वरलाइट में ऐसा करने का अब एक बेहतर तरीका है। यदि आपका नियंत्रण किसी संपत्ति से जुड़ा हुआ है, तो आपको बस अपने बाध्यकारी कथन को थोड़ा सा बदलना है। अपने बाध्यकारी के लिए निम्नलिखित का प्रयोग करें:


ध्यान दें कि आप इसे कस्टम गुणों पर भी उपयोग कर सकते हैं, आपको बस इतना करना है कि बॉक्स में मान अमान्य है और नियंत्रण लाल सीमा के साथ हाइलाइट किया जाएगा। यदि आप लाल सीमा के ऊपरी दाएं भाग पर क्लिक करते हैं तो अपवाद संदेश पॉप अप होगा।

0
जोड़ा
बाइंडिंग विधि को कॉल करने के लिए +1।
जोड़ा लेखक Justin R., स्रोत
मुझे रेगेक्स समाधान पसंद है। लेकिन यहां समस्या यह है कि मैं मौजूदा नंबर पर एक ऋण नहीं जोड़ सकता, क्योंकि ऐसा लगता है कि नया टेक्स्ट हमेशा पुराने पाठ में जोड़ा जाता है। कोई उपाय?
जोड़ा लेखक newman, स्रोत
रेगेक्स समाधान बाध्यकारी सत्यापन विधि के जितना अच्छा नहीं है।
जोड़ा लेखक Eric, स्रोत

इन उत्तरों में से कुछ से विचारों को जोड़कर, मैंने एक न्यूमेरिक टेक्स्टबॉक्स बनाया है

  • दशमलव संभालता है
  • किसी भी दर्ज '-' या '।' को सुनिश्चित करने के लिए कुछ बुनियादी सत्यापन करता है वैध है
  • चिपकाए गए मानों को संभालता है

अगर आप किसी भी अन्य तर्क के बारे में सोच सकते हैं तो कृपया अपडेट करने के लिए स्वतंत्र महसूस करें।

public class NumericTextBox : TextBox
{
    public NumericTextBox()
    {
        DataObject.AddPastingHandler(this, OnPaste);
    }

    private void OnPaste(object sender, DataObjectPastingEventArgs dataObjectPastingEventArgs)
    {
        var isText = dataObjectPastingEventArgs.SourceDataObject.GetDataPresent(System.Windows.DataFormats.Text, true);

        if (isText)
        {
            var text = dataObjectPastingEventArgs.SourceDataObject.GetData(DataFormats.Text) as string;
            if (IsTextValid(text))
            {
                return;
            }
        }

        dataObjectPastingEventArgs.CancelCommand();
    }

    private bool IsTextValid(string enteredText)
    {
        if (!enteredText.All(c => Char.IsNumber(c) || c == '.' || c == '-'))
        {
            return false;
        }

        //We only validation against unselected text since the selected text will be replaced by the entered text
        var unselectedText = this.Text.Remove(SelectionStart, SelectionLength);

        if (enteredText == "." && unselectedText.Contains("."))
        {
            return false;
        }

        if (enteredText == "-" && unselectedText.Length > 0)
        {
            return false;
        }

        return true;
    }

    protected override void OnPreviewTextInput(System.Windows.Input.TextCompositionEventArgs e)
    {
        e.Handled = !IsTextValid(e.Text);
        base.OnPreviewTextInput(e);
    }
}
0
जोड़ा

मैं एक संलग्न संपत्ति का उपयोग कर रहा हूं ताकि उपयोगकर्ता टेक्स्ट बॉक्स में मानों को बदलने के लिए ऊपर और नीचे कुंजी का उपयोग कर सके। इसका उपयोग करने के लिए, आप बस उपयोग करें

100

यह वास्तव में सत्यापन प्रश्नों को संबोधित नहीं करता है जिन्हें इस प्रश्न में संदर्भित किया गया है, लेकिन यह एक संख्यात्मक अप / डाउन कंट्रोल नहीं होने के बारे में मैं करता हूं। इसे थोड़ा सा उपयोग करने के लिए, मुझे लगता है कि मैं वास्तव में पुराने संख्यात्मक अप / डाउन कंट्रोल से बेहतर इसे पसंद कर सकता हूं।

कोड सही नहीं है, लेकिन यह उन मामलों को संभालता है जिन्हें मुझे संभालने के लिए आवश्यक था:

  • Up arrow, Down arrow
  • Shift + Up arrow, Shift + Down arrow
  • Page Up, Page Down
  • Binding Converter on the text property

<�कोड> पीछे कोड

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;

namespace Helpers
{
    public class TextBoxNumbers
    {    
        public static Decimal GetSingleDelta(DependencyObject obj)
        {
            return (Decimal)obj.GetValue(SingleDeltaProperty);
        }

        public static void SetSingleDelta(DependencyObject obj, Decimal value)
        {
            obj.SetValue(SingleDeltaProperty, value);
        }

        // Using a DependencyProperty as the backing store for SingleValue.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty SingleDeltaProperty =
            DependencyProperty.RegisterAttached("SingleDelta", typeof(Decimal), typeof(TextBoxNumbers), new UIPropertyMetadata(0.0m, new PropertyChangedCallback(f)));

        public static void f(DependencyObject o, DependencyPropertyChangedEventArgs e)
        {
            TextBox t = o as TextBox;

            if (t == null)
                return;

            t.PreviewKeyDown += new System.Windows.Input.KeyEventHandler(t_PreviewKeyDown);
        }

        private static Decimal GetSingleValue(DependencyObject obj)
        {
            return GetSingleDelta(obj);
        }

        private static Decimal GetDoubleValue(DependencyObject obj)
        {
            return GetSingleValue(obj) * 10;
        }

        private static Decimal GetTripleValue(DependencyObject obj)
        {
            return GetSingleValue(obj) * 100;
        }

        static void t_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            TextBox t = sender as TextBox;
            Decimal i;

            if (t == null)
                return;

            if (!Decimal.TryParse(t.Text, out i))
                return;

            switch (e.Key)
            {
                case System.Windows.Input.Key.Up:
                    if (Keyboard.Modifiers == ModifierKeys.Shift)
                        i += GetDoubleValue(t);
                    else
                        i += GetSingleValue(t);
                    break;

                case System.Windows.Input.Key.Down:
                    if (Keyboard.Modifiers == ModifierKeys.Shift)
                        i -= GetDoubleValue(t);
                    else
                        i -= GetSingleValue(t);
                    break;

                case System.Windows.Input.Key.PageUp:
                    i += GetTripleValue(t);
                    break;

                case System.Windows.Input.Key.PageDown:
                    i -= GetTripleValue(t);
                    break;

                default:
                    return;
            }

            if (BindingOperations.IsDataBound(t, TextBox.TextProperty))
            {
                try
                {
                    Binding binding = BindingOperations.GetBinding(t, TextBox.TextProperty);
                    t.Text = (string)binding.Converter.Convert(i, null, binding.ConverterParameter, binding.ConverterCulture);
                }
                catch
                {
                    t.Text = i.ToString();
                }
            }
            else
                t.Text = i.ToString();
        }
    }
}
0
जोड़ा
यह कोड का एक बड़ा टुकड़ा है। मैंने कोशिश की है कि विभिन्न एनयूडी नियंत्रण हमेशा छोटी है। आपका आकर्षण, धन्यवाद की तरह काम करता है। :)
जोड़ा लेखक Echilon, स्रोत
और यह एमवीवीएम के साथ फिट बैठता है। +1
जोड़ा लेखक Ignacio Soler Garcia, स्रोत

क्या आप केवल निम्न की तरह कुछ उपयोग नहीं कर सकते?

int numericValue = 0;

if (false == int.TryParse(yourInput, out numericValue))
{
    // handle non-numeric input
}
0
जोड़ा
Private Sub Value1TextBox_PreviewTextInput(ByVal sender As Object, ByVal e As TextCompositionEventArgs) Handles Value1TextBox.PreviewTextInput
    Try
        If Not IsNumeric(e.Text) Then
            e.Handled = True
        End If
    Catch ex As Exception
    End Try
End Sub

मेरे लिए काम किया

0
जोड़ा
... जब तक उपयोगकर्ता एक - या दर्ज नहीं करता है।
जोड़ा लेखक Greg Sansom, स्रोत
void PreviewTextInputHandler(object sender, TextCompositionEventArgs e)
{
    string sVal = e.Text;
    int val = 0;

    if (sVal != null && sVal.Length > 0)
    {
        if (int.TryParse(sVal, out val))
        {
            e.Handled = false;
        }
        else
        {
            e.Handled = true;
        }
    }
}
0
जोड़ा
यह काम नहीं करेगा क्योंकि e.Text में केवल अतिरिक्त टेक्स्ट है, न कि संपूर्ण टेक्स्टबॉक्स सामग्री। मूल्य सिर्फ "।" हो सकता है
जोड़ा लेखक Greg Sansom, स्रोत
public class NumericTextBox : TextBox
{
    public NumericTextBox()
        : base()
    {
        DataObject.AddPastingHandler(this, new DataObjectPastingEventHandler(CheckPasteFormat));
    }

    private Boolean CheckFormat(string text)
    {
        short val;
        return Int16.TryParse(text, out val);
    }

    private void CheckPasteFormat(object sender, DataObjectPastingEventArgs e)
    {
        var isText = e.SourceDataObject.GetDataPresent(System.Windows.DataFormats.Text, true);

        if (isText)
        {
            var text = e.SourceDataObject.GetData(DataFormats.Text) as string;
            if (CheckFormat(text))
            {
                return;
            }
        }

        e.CancelCommand();
    }

    protected override void OnPreviewTextInput(System.Windows.Input.TextCompositionEventArgs e)
    {
        if (!CheckFormat(e.Text))
        {
            e.Handled = true;
        }
        else
        {
            base.OnPreviewTextInput(e);
        }
    }
}

इसके अतिरिक्त आप उचित निर्भरता गुण प्रदान करके पार्सिंग व्यवहार को अनुकूलित कर सकते हैं।

0
जोड़ा
मेरे लिए पूरी तरह से काम करता है
जोड़ा लेखक Darren, स्रोत
यह काम नहीं करेगा क्योंकि e.Text में केवल अतिरिक्त टेक्स्ट है, न कि संपूर्ण टेक्स्टबॉक्स सामग्री। मान सिर्फ "हो सकता है।"
जोड़ा लेखक Greg Sansom, स्रोत

यह सुनिश्चित करने के लिए मुख्य समाधान में जोड़ें कि टेक्स्टबॉक्स साफ़ होने पर बाध्यकारी को शून्य पर अपडेट किया गया हो।

protected override void OnPreviewKeyUp(System.Windows.Input.KeyEventArgs e)
{
    base.OnPreviewKeyUp(e);

    if (BindingOperations.IsDataBound(this, TextBox.TextProperty))
    {
        if (this.Text.Length == 0)
        {
            this.SetValue(TextBox.TextProperty, "0");
            this.SelectAll();
        }
    }
}
0
जोड़ा
दिलचस्प। क्या इसे IsDataBound कॉल में लपेटने की आवश्यकता है?
जोड़ा लेखक Matt Hamilton, स्रोत

मैंने LINQ अभिव्यक्ति का उपयोग करके मूल रूप से 2 पंक्तियों के उत्तर के रूप में चिह्नित उत्तर को सरल बनाने का निर्णय लिया।

e.Handled = !e.Text.All(Char.IsNumber);
base.OnPreviewTextInput(e);
0
जोड़ा
यह अच्छा और साफ है। लेकिन मैं इसे कैसे स्वीकार करूं "।" तथा "-"?
जोड़ा लेखक newman, स्रोत
e.Text.All (सीसी => Char.IsNumber (सीसी) || सीसी == '।' || सीसी == '-') ?
जोड़ा लेखक user7116, स्रोत
दुर्भाग्यवश, जब उपयोगकर्ता एक व्हाइटस्पेस इनपुट करता है तो OnPreviewTextInput को कॉल नहीं किया जाता है। इसे OnPreviewKeyDown को ओवरराइड करके अलग से संभाला जा सकता है, फिर भी उपयोगकर्ता गैर-संख्यात्मक वर्णों को पेस्ट करने में सक्षम होगा। पीएस .: आप पूर्ण विधि लिखकर अपना जवाब सुधार सकते हैं: संरक्षित ओवरराइड ऑनऑरव्यूट टेक्स्ट इनपुट (टेक्स्टकंपोशनइवेंटआर्जे ई) {...}
जोड़ा लेखक Gobe, स्रोत

आर्कटूरस उत्तर का मेरा संस्करण, काम करने के लिए प्रयुक्त कनवर्ट विधि को बदल सकता है int / uint / दशमलव / बाइट (रंगों के लिए) या किसी अन्य संख्यात्मक प्रारूप के साथ जिसका उपयोग आप करते हैं, कॉपी / पेस्ट के साथ भी काम करता है

protected override void OnPreviewTextInput( System.Windows.Input.TextCompositionEventArgs e )
{
    try
    {
        if ( String.IsNullOrEmpty( SelectedText ) )
        {
            Convert.ToDecimal( this.Text.Insert( this.CaretIndex, e.Text ) );
        }
        else
        {
            Convert.ToDecimal( this.Text.Remove( this.SelectionStart, this.SelectionLength ).Insert( this.SelectionStart, e.Text ) );
        }
    }
    catch
    {
        // mark as handled if cannot convert string to decimal
        e.Handled = true;
    }

    base.OnPreviewTextInput( e );
}

N.B. अवांछित कोड

0
जोड़ा
कॉपी / पेस्ट के साथ काम नहीं करता है
जोड़ा लेखक Kluyg, स्रोत

आप पूर्वावलोकनकेडडाउन ईवेंट की बजाय कुंजीडाउन ईवेंट का उपयोग करने का प्रयास क्यों नहीं करते हैं। आप वहां अमान्य वर्णों को रोक सकते हैं, लेकिन सभी नियंत्रण वर्ण स्वीकार किए जाते हैं। यह मेरे लिए काम करता प्रतीत होता है:

private void NumericKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
    bool isNumPadNumeric = (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9);
    bool isNumeric =((e.Key >= Key.D0 && e.Key <= Key.D9) && (e.KeyboardDevice.Modifiers == ModifierKeys.None));
    bool isDecimal = ((e.Key == Key.OemPeriod || e.Key == Key.Decimal) && (((TextBox)sender).Text.IndexOf('.') < 0));
    e.Handled = !(isNumPadNumeric || isNumeric || isDecimal);
}
0
जोड़ा

पाठ को संख्यात्मक है या नहीं, यह जांचने के लिए मैं एक कस्टम सत्यापन नियम का उपयोग करता हूं।

public class DoubleValidation : ValidationRule
{
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {
        if (value is string)
        {
            double number;
            if (!Double.TryParse((value as string), out number))
                return new ValidationResult(false, "Please enter a valid number");
        }

        return ValidationResult.ValidResult;
    }

फिर जब मैं एक संख्यात्मक संपत्ति पर टेक्स्टबॉक्स बांधता हूं, तो मैं <�कस्टम> बाइंडिंग। वैलिडेशन नियम संग्रह में नई कस्टम क्लास जोड़ता हूं। नीचे दिए गए उदाहरण में सत्यापन कोड हर बार TextBox.Text परिवर्तनों की जांच की जाती है।


    
        
            
                
            
        
    

0
जोड़ा

कनवर्टर का भी उपयोग कर सकते हैं जैसे:

public class IntegerFormatConverter : IValueConverter
{
    public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        int result;
        int.TryParse(value.ToString(), out result);
        return result;
    }

    public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        int result;
        int.TryParse(value.ToString(), out result);
        return result;
    }
}
0
जोड़ा
कनवर्टर की आवश्यकता नहीं है - डब्ल्यूपीएफ डिफ़ॉल्ट रूप से रूपांतरण करेगा। मेरा प्रश्न यह सुनिश्चित करने के बारे में और अधिक था कि उपयोगकर्ता कभी भी त्रुटि नहीं देखता क्योंकि उन्होंने गैर-संख्यात्मक मान दर्ज किया है। एक कनवर्टर उन्हें ऐसा करने से नहीं रोकता है।
जोड़ा लेखक Matt Hamilton, स्रोत