سؤال

ما هو الفرق بين استخدام المحول (ivalueConverter) والتمرير في قيم أخرى كمعلمات (ConverterParameter) مقابل باستخدام multiconverter (imultivalueConverter) والتمرير فقط في قيم محول متعددة؟

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

المحلول

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

والفرق الآخر هو أن المحول هو إدخال لكل من التحويل والتحويل ، في حين أن جميع الروابط في التعددية متعددة هي مدخلات لتحويل وإخراج التحويل. على سبيل المثال ، إذا كنت تتحول من DateTime إلى سلسلة ، فقد يكون لديك enterterparameter يكون سلسلة تنسيق ، لأن ذلك يؤثر على التحويل في كلا الاتجاهين:

public class DateTimeConverter
    : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return ((DateTime)value).ToString((string)parameter, null);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return DateTime.ParseExact((string)value, (string)parameter, null);
    }
}

من ناحية أخرى ، إذا كنت ترغب في التحويل من زوجين إلى حجم ، فأنت ترغب في إعادة زوجين عند التحويل:

public class SizeConverter
    : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return new Size((double)values[0], (double)values[1]);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        var size = (Size)value;
        return new object[] { size.Width, size.Height };
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top