سؤال

لدي تشغيل البيانات التالية على ListBoxItems في صندوق Listbox متعدد الاستخداماتي

<DataTrigger Value="True">
    <DataTrigger.Binding>
        <MultiBinding Converter="{StaticResource DisableWorkItemConverter}">
            <Binding ElementName="MainForm" Path="PickedWorkItemID"/>
            <Binding Path="Id"/>
        </MultiBinding>
    </DataTrigger.Binding>
    <Setter Property="IsEnabled" Value="False"/>
    <Setter Property="IsSelected" Value="False"/>
</DataTrigger>

يحصل iSenabled على غرامة، ولكن تم إرسالها لا يحصل على مجموعة. كيف يمكنني إصلاح ذلك؟

حاولت إخراج Isenabled لمعرفة ما إذا كان يتعارض مع مصادقة، ولكن البند ظل محددا عندما لا ينبغي.

فقط لإعادة التكرار، يمكنني معرفة الروابط والتحول يعمل بشكل جيد، لأن iSenabled يعمل بشكل صحيح. ولكن لسبب ما أعصت أنه لن يتم تعيين الأمم المتحدة.


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

أيه أفكار؟ أساسا لا أريد تحديد أي من الصفوف المعوقين.


تحرير 2:

حاولت إضافة الزناد العادي على أمل أن تسلسل سلسلة من مشغل البيانات وهذا لم يعمل أيضا.

<Style.Triggers>
    <DataTrigger Value="True">
        <DataTrigger.Binding>
            <MultiBinding Converter="{StaticResource DisableWorkItemConverter}">
                <Binding ElementName="MainForm" Path="PickedWorkItemID"/>
                <Binding Path="Id"/>
            </MultiBinding>
        </DataTrigger.Binding>
        <Setter Property="IsEnabled" Value="False"/>
    </DataTrigger>
    <Trigger Property="IsEnabled" Value="False">
        <Setter Property="IsSelected" Value="False"></Setter>
    </Trigger>
</Style.Triggers>
هل كانت مفيدة؟

المحلول

يبدو أنه بمجرد تعيين الخاصية "تم إرسالها"، سواء بواسطة المستخدم أو في الكود الخلف، لن يعمل STERTER. لست متأكدا مما إذا كان هناك أي طريقة حول ذلك، ولكن هناك اختراق على الأقل من شأنه أن يعمل في حالتك المحددة. يمكنك تسجيل معالج لحدث "IsenableDChanged" على ListBoxitem الخاص بك ثم تحقق من حالة البيانات الخاصة بك وتعيين تم إرسالها في المعالج إذا استدعاء البيانات به.

مثال:

private void ListBoxItem_EnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    ListBoxItem senderItem = (ListBoxItem)sender;
    if (YourDataCondition == true)
    {
        senderItem.IsSelected = false;
    }
}

الحل الآخر الوحيد الذي تمكنت من العثور عليه هو إضافة بعض خاصية التبعية إلى ListBoxitem، سجل طريقة مماثلة لحدث "OnPropertychanged"، وتغيير هذه الخاصية في DataTrigger الخاص بك.

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

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