سؤال

هل هناك طريقة لتملزم آخر كقيمة تراجع؟

أحاول أن أفعل شيئا مثل هذا:

<Label Content="{Binding SelectedItem.Name, ElementName=groupTreeView,
                         FallbackValue={Binding RootGroup.Name}}" />

إذا حصل أي شخص على خدعة أخرى لسحبها، فسيكون ذلك رائعا.

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

المحلول

ما الذي تبحث عنه هو شيء يسمى prioritybinding (# 6 على هذه قائمة)

(من المقال)

إن الإشارة إلى prioritybinding هي تسمية ارتباطات بيانات متعددة من أجل أكثر مرغوبة على الأقل مرغوبة. وبهذه الطريقة إذا فشلت أول ملزمة، فارغة و / أو افتراضيا، يمكن أن يأخذ ربط آخر مكان.

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

<TextBox>
    <TextBox.Text>
        <PriorityBinding>
            <Binding Path="LastNameNonExistant" IsAsync="True" />
            <Binding Path="FirstName" IsAsync="True" />
        </PriorityBinding>
    </TextBox.Text>
</TextBox>

نصائح أخرى

تحت أي ظروف هل ترغب في استخدام قيمة الغطاء؟ كيف يمكنك تحديد أن الربط قد فشل؟ لا تزال ملزمة صالحة حتى لو كانت مرتبطة بقيمة فارغة.

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

الدفع محولات هنا

إذا واجهت مشاكل مع ملزمة بالقيم الخالية من القيم وأولويتها (مثل Shimmy مدببة)، فيمكنك الذهاب مع multibiting و multialueconverter مثل هذا:

public class PriorityMultiValueConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return values.FirstOrDefault(o => o != null);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

الاستعمال:

<TextBox>
    <TextBox.Text>
        <MultiBinding Converter="{StaticResource PriorityMultiValueConverter}">
            <Binding Path="LastNameNull" />
            <Binding Path="FirstName" />
        </MultiBinding>
    </TextBox.Text>
</TextBox>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top