2011-02-11 12 views
13

पहले; सवाल अशिष्ट है, मेरे पास जवाब है! मुझे यहां देखने से इतनी मदद मिली है कि मैं इस साफ चाल को वापस देना चाहता था।आप बाध्य मूल्य कैसे बदलते हैं, इसे उलटते हैं, इसे गुणा करते हैं, इससे घटाते हैं या इसमें जोड़ते हैं?

कल्पना कीजिए कि आपके पास एक मूल्य है जिसे आप बांधना चाहते हैं, लेकिन यह किसी भी तरह या कुछ हद तक गलत है।

  • मेरी एक ऐसी स्थिति थी जहां मैं एक मूल्य से बंधना चाहता था, लेकिन जब मूल्य 1 था, तो मुझे 0 की आवश्यकता थी, और इसके विपरीत।
  • एक समय था जब मैं एक तत्व की चौड़ाई को एक माता-पिता की चौड़ाई में बांधना चाहता था - 68 पीएक्स।

    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Windows.Data; 
    
    namespace GenericWPF 
    { 
        /// <summary> 
        /// Will return a*value + b 
        /// </summary> 
        public class FirstDegreeFunctionConverter : IValueConverter 
        { 
         public double A { get; set; } 
        public double B { get; set; } 
    
        #region IValueConverter Members 
    
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
        { 
         double a = GetDoubleValue(parameter, A); 
    
         double x = GetDoubleValue(value, 0.0); 
    
         return (a * x) + B; 
        } 
    
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
        { 
         double a = GetDoubleValue(parameter, A); 
    
         double y = GetDoubleValue(value, 0.0); 
    
         return (y - B)/a; 
        } 
    
        #endregion 
    
    
        private double GetDoubleValue(object parameter, double defaultValue) 
        { 
         double a; 
         if(parameter != null) 
          try 
          { 
           a = System.Convert.ToDouble(parameter); 
          } 
          catch 
          { 
           a = defaultValue; 
          } 
         else 
          a = defaultValue; 
         return a; 
        } 
    } 
    

    इसका उपयोग कैसे करें:

+0

कनवर्टर के लिए अच्छा व्यापक उपयोग विचार। मैं इस विचार को ध्यान में रखूंगा। अधिकांश गणित जिन्हें मैंने कभी भी बाध्य मूल्यों पर करने की आवश्यकता है, इस कनवर्टर का उपयोग करके किया जा सकता है। मेरा अनुभव इन्हें या तो रैखिक परिवर्तन समारोह या पहली डिग्री बहुपद कहलाता है। मैं शायद इसे एक रैखिक ट्रान्सफॉर्म कनवर्टर नाम दूंगा। – Alain

+2

आपको प्रश्न में इसे शामिल करने के बजाय उत्तर को वास्तविक उत्तर के रूप में पोस्ट करना चाहिए। –

+0

इसे फ्रेंच में "प्रथम डिग्री फ़ंक्शन" भी कहा जाता है ...खैर, हर जगह, मुझे लगता है :- डी – Emmanuel

उत्तर

11

FirstDegreeFunctionConverter दर्ज?

आप संसाधन अनुभाग में प्रत्येक उपयोग के लिए एक संसाधन बनाने:

<GenericWPF:FirstDegreeFunctionConverter x:Key="ReverseOne" 
          A="-1" 
          B="1" /> 

<Border Opacity="{Binding Path=Opacity 
    , ElementName=daOtherField 
    , Converter={StaticResource ReverseOne}}" /> 

<GenericWPF:FirstDegreeFunctionConverter x:Key="ListboxItemWidthToErrorWidth" 
    A="1" 
    B="-68" /> 

<TextBox MaxWidth="{Binding Path=ActualWidth 
    , Converter={StaticResource ListboxItemWidthToErrorWidth} 
    , RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" /> 

नाम समारोह y = एक * x + b (एक "पहली डिग्री समारोह" में नार्वेजियन कहा जाता है), और की से आता है निश्चित रूप से इसे दूसरे डिग्री फ़ंक्शन y = a * x^2 + bx + c में अपग्रेड करना संभव होगा, लेकिन मुझे इसके लिए अभी तक कोई उपयोग नहीं मिला है।

मुझे एक ऐसी स्थिति थी जहां मैं चौड़ाई के आधार पर कॉलम बनाना चाहता था। प्रत्येक बार मुझे 200 पिक्सेल अधिक चौड़ाई मिली, मैं चाहता था कि कंटेनर मुझे एक और कॉलम दिखाए। उस समय मैंने एक कनवर्टर हार्डकोड किया, लेकिन मुझे इसके बजाय वाई = (ए/एक्स) + बी कनवर्टर बनाना चाहिए था।

अब, मुझे इस कनवर्टर का नाम क्या होना चाहिए ताकि सभी समझ सकें कि यह क्या है? चूंकि मैं नार्वेजियन हूं, इसलिए मैंने विद्यालय में सीखा अभिव्यक्ति का उपयोग किया, सीधे अनुवाद किया। कृपया, अगर आपके पास कोई सुझाव या राय है, तो मुझे बताएं। किसी भी शोधन या आप में से भी सराहना की जाएगी सोचा है सुधार ...


शायद "LinearTransformConverter" बेहतर संवाद होगा कनवर्टर आप के लिए करता है, मैं इसके बारे में सोचो करेंगे। कोई अन्य प्रस्ताव?

public class PolynomialConverter : IValueConverter 
{ 
    public DoubleCollection Coefficients { get; set; } 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     double x = (double)value; 
     double output = 0; 
     for (int i = Coefficients.Count - 1; i >= 0 ; i--) 
      output += Coefficients[i] * Math.Pow(x, (Coefficients.Count - 1) - i); 

     return output; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     //This one is a bit tricky, if anyone feels like implementing this... 
     throw new NotSupportedException(); 
    } 
} 

उदाहरण:: टो

4

क्या और भी बेहतर है एक PolynomialConverter है, यहाँ एक तरह से संस्करण है

<!-- x^2 --> 
<vc:PolynomialConverter Coefficients="1,0,0"/> 
<!-- x + 5 --> 
<vc:PolynomialConverter Coefficients="1,5"/> 
<!-- 2x + 4 --> 
<vc:PolynomialConverter Coefficients="2,4"/> 

वैकल्पिक रूप से एक ConverterParameter बजाय इस्तेमाल कर सकते हैं के लिए सेट नहीं कनवर्टर में गुणांक स्वयं।

DoubleCollection coefficients = DoubleCollection.Parse((string)parameter); 
//... 
संबंधित मुद्दे

 संबंधित मुद्दे