سؤال

لدي XAML التالي:

<TextBlock Text="{Binding ElementName=EditListBox, Path=SelectedItems.Count}" Margin="0,0,5,0"/>
<TextBlock Text="items selected">
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=EditListBox, Path=SelectedItems.Count}" Value="1">
                    <Setter Property="TextBlock.Text" Value="item selected"></Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

تتغير كتلة النص الأولى بسهولة باستخدام SelectedItems.Count، حيث تظهر 0,1,2، وما إلى ذلك.يبدو أن مشغل البيانات الموجود في الكتلة الثانية لا يعمل أبدًا لتغيير النص.

أي أفكار؟

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

المحلول

يتم تشغيل DataTrigger ولكن حقل النص الخاص بـ TextBlock الثاني الخاص بك يتم ترميزه بشكل ثابت على أنه "عناصر محددة" لذلك لن يكون قادرًا على التغيير.لرؤيتها قيد التشغيل، يمكنك إزالة النص = "العناصر المحددة".

مشكلتك هي مرشح جيد لاستخدام ملف تحويل القيمة بدلاً من مشغل البيانات.فيما يلي كيفية إنشاء ValueConverter واستخدامه لجعله يضبط النص على ما تريده.

قم بإنشاء محول القيمة هذا:

public class CountToSelectedTextConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if ((int)value == 1)
            return "item selected";
        else
            return "items selected";
    }

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

    #endregion
}

أضف مرجع مساحة الاسم إلى التجميع الذي يوجد به المحول:

xmlns:local="clr-namespace:ValueConverterExample"

أضف المحول إلى مواردك:

<Window.Resources>
    <local:CountToSelectedTextConverter x:Key="CountToSelectedTextConverter"/>
</Window.Resources>

قم بتغيير كتلة النص الثانية إلى:

    <TextBlock Text="{Binding ElementName=EditListBox, Path=SelectedItems.Count, Converter={StaticResource CountToSelectedTextConverter}}"/>

نصائح أخرى

وبدلاً من ذلك، يمكنك استبدال XAML الخاص بك بما يلي:

<TextBlock Margin="0,0,5,0" Text="{Binding ElementName=EditListBox, Path=SelectedItems.Count}"/>
<TextBlock>
    <TextBlock.Style>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="Text" Value="items selected"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=EditListBox, Path=SelectedItems.Count}" Value="1">
                    <Setter Property="Text" Value="item selected"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TextBlock.Style>
</TextBlock>

يمكن للمحولات حل الكثير من مشكلات الربط، لكن وجود الكثير من المحولات المتخصصة يصبح أمرًا فوضويًا للغاية.

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