WPF ربط البيانات مع بعملية حسابية بسيطة العملية ؟

StackOverflow https://stackoverflow.com/questions/125536

  •  02-07-2019
  •  | 
  •  

سؤال

أريد أن أضيف قيمة ثابتة على واردة ملزمة صحيح.في الحقيقة لدي العديد من الأماكن التي ترغب في ربط نفس المصدر القيمة ولكن إضافة ثوابت مختلفة.لذا فإن الحل المثالي هو أن يكون شيئا من هذا القبيل...

<TextBox Canvas.Top="{Binding ElementName=mySource, Path=myInt, Constant=5}"/>
<TextBox Canvas.Top="{Binding ElementName=mySource, Path=myInt, Constant=8}"/>
<TextBox Canvas.Top="{Binding ElementName=mySource, Path=myInt, Constant=24}"/>

(ملاحظة:هذا مثال لتوضيح الفكرة بلدي الفعلية ملزمة السيناريو هو عدم قماش خاصية مربع النص.ولكن هذا يدل على فكرة أكثر وضوحا)

في لحظة الحل الوحيد الذي يمكنني أن أفكر في فضح العديد من مصادر مختلفة خصائص كل منها يضيف على مختلف المستمر لنفس الداخلية قيمة.لذا أنا يمكن أن تفعل شيئا مثل هذا...

<TextBox Canvas.Top="{Binding ElementName=mySource, Path=myIntPlus5}"/>
<TextBox Canvas.Top="{Binding ElementName=mySource, Path=myIntPlus8}"/>
<TextBox Canvas.Top="{Binding ElementName=mySource, Path=myIntPlus24}"/>

ولكن هذا قاتمة جدا لأنه في المستقبل قد تحتاج إلى الحفاظ على إضافة خصائص جديدة على ثوابت جديدة.أيضا إذا كنت بحاجة إلى تغيير القيمة المضافة أحتاج للذهاب تغيير الكائن المصدر الذي هو الى حد ناف.

يجب أن يكون هناك أكثر عمومية من هذا ؟ أي WPF الخبراء لديك أية أفكار ؟

هل كانت مفيدة؟

المحلول

أعتقد يمكنك أن تفعل هذا مع قيمة المحول.هنا بلوق الدخول يتناول تمرير المعلمة أن قيمة تحويل في xaml.و هذا بلوق يعطي بعض التفاصيل تنفيذ قيمة المحول.

نصائح أخرى

يمكنني استخدام MathConverterالتي تم إنشاؤها للقيام بجميع بسيطة arithmatic العمليات.رمز محول هو هنا ويمكن استخدام مثل هذا:

<TextBox Canvas.Top="{Binding SomeValue, 
             Converter={StaticResource MathConverter},
             ConverterParameter=@VALUE+5}" />

يمكنك حتى استخدامها مع أكثر تقدما arithmatic العمليات مثل

Width="{Binding ElementName=RootWindow, Path=ActualWidth,
                Converter={StaticResource MathConverter},
                ConverterParameter=((@VALUE-200)*.3)}"

باستخدام قيمة محول هو حل جيد لهذه المشكلة كما أنه يسمح لك لتعديل مصدر القيمة كما انها ملزمة واجهة المستخدم.

لقد استعملت ما يلي في عدة أماكن.

public class AddValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        object result = value;
        int parameterValue;

        if (value != null && targetType == typeof(Int32) && 
            int.TryParse((string)parameter, 
            NumberStyles.Integer, culture, out parameterValue))
        {
            result = (int)value + (int)parameterValue;
        }

        return result;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

على سبيل المثال

 <Setter Property="Grid.ColumnSpan"
         Value="{Binding 
                   Path=ColumnDefinitions.Count,
                   RelativeSource={RelativeSource AncestorType=Grid},
                   Converter={StaticResource addValueConverter},
                   ConverterParameter=1}"
  />

لم يسبق لي استخدام WPF, ولكن لدي حل ممكن.

يمكن ملزمة مسار خريطة خريطة ؟ إذا كان الأمر كذلك, ثم ينبغي أن تكون قادرة على اتخاذ حجة (المفتاح).كنت بحاجة إلى إنشاء فئة تنفذ مخطط واجهة, ولكن في الحقيقة فقط بإرجاع القيمة الأساسية التي يمكنك تهيئة "خريطة" مع إضافة مفتاح.

public Integer get( Integer key ) { return baseInt + key; }  // or some such

دون القدرة على تمرير عدد من الوسم, أنا لا أرى كيف أنت ذاهب للحصول على العودة دلتا مختلفة من القيمة الأصلية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top