لماذا أحصل على dependencyproperty.unsetValue عند تحويل قيمة في متعددة؟

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

سؤال

لديّ imultivalueConverter بسيط للغاية أو قيمتان ببساطة. في المثال أدناه ، أريد عكس القيمة الأولى باستخدام عاكس منطقي بسيط بنفس القدر.

<MultiBinding Converter="{StaticResource multiBoolToVis}">
    <Binding Path="ConditionA" Converter="{StaticResource boolInverter}"/>
    <Binding Path="ConditionB"/>
</MultiBinding>

والعاكس:

public class BoolInverterConverter : IValueConverter
{
    #region IValueConverter Members
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is bool)
        {
            return !((bool)value);
        }
        return null;
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
    #endregion
}

عندما أقوم بتضمين boolinverter ، تصبح القيمة الأولى في multivalueConverter "respencyproperty.unsetValue". لا توجد مشاكل عندما لا أستخدم المحول (بخلاف لم يكن المنطق الذي أهدف إليه بالطبع).

هل فاتني شيء؟ يوضح التنقل عبر مصحح الأخطاء أن العكسي يعكس بشكل صحيح القيمة التي أجريها ، ولكن لا يتم إرسال هذه القيمة بعد ذلك إلى multivalueConverter.

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

المحلول

من MSDN:

UnsetValue هي قيمة حراس تستخدم للسيناريوهات حيث لا يستطيع نظام خاصية WPF تحديد قيمة REPENENCYPROPERTY المطلوبة. يتم استخدام UnsetValue بدلاً من المرجع الخالي (لا شيء في Visual Basic) ، لأن المرجع الفارغ يمكن أن يكون قيمة خاصية صالحة ، وكذلك افتراضي صالح (ويستخدم بشكل متكرر).

وهو ما يعني أحد الأشياء التالية:

  • يمكنك استخدام قالب (ControlTemplate أو DataTemplate) ، والقيمة لا تحتوي على موقد بيانات في وقت تحميله. لذلك سوف تضغط على المحول مرتين ، أولاً مع غير القيمة ، والثانية مع القيمة المنطقية ؛ لذلك لا شيء يدعو للقلق؛
  • لك Binding غير صحيح ، وهذا يعني أن الربط لا يمكن أن يحدد قيمة ، مما يؤدي إلى عدم القيمة .. يجب أن ترى تحذيرًا ..

أيضا ، لا يمكنك الجمع بين المحولات كما تفعل .. لذلك ربما ذلك.

قم بإزالة المحول في الربط الداخلي ، ويجب إصلاحه! قون

أتمنى أن يساعدك هذا!

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