ربط أزرار خصائص isenabled/الرؤية باستخدام x: الاسم كمعلمة في طريقة في الكود behind

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

سؤال

أحتاج إلى تمرير اسم عناصر التحكم إلى طريقة في كائن أمان يقوم بإرجاع قيمة منطقية للخاصية ISENABDER وطريقة أخرى تُرجع وضوحها (انهارت أو مخفية أو مرئية). يجب فحص كلاهما لأغراض الإذن.

لقد حاولت استخدام ObjectDataprovider ، لكن جميع الأمثلة تُظهر فقط إدخال المستخدم من مربع نص للمعلمات. أحتاج على وجه التحديد إلى تمرير اسم عنصر تحكم إلى الطريقة التي تستند إلى خاصية الزر X: Name.

ما هي أبسط طريقة وأكثرها كفاءة للتعامل مع هذه المشكلة. شكرا مقدما.

تحديث:أحاول استخدام محول وهذه هي طريقة التحويل التي توصلت إليها:

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (values != null)
        {
            DataTable tblPermissions = (DataTable)values[0];
            string sFunctionName = values[1].ToString();

            DataRow[] rows = tblPermissions.Select("fun_name = '" + sFunctionName + "'");
            if ((bool)rows[0]["fun_enable"])
                return true;
            else
                return false;
        }

        return string.Empty;
    }

ما يلي هو xaml:

                    <Button.IsEnabled>
                        <MultiBinding Converter="{StaticResource IsFunctionEnabledConverter}">
                            <Binding ElementName="{StaticResource PermissionsTable}" />
                            <Binding ElementName="btnSave" Path="Name" />
                        </MultiBinding>
                    </Button.IsEnabled>
هل كانت مفيدة؟

المحلول

يمكنك كتابة ivalueConverter لإجراء استدعاء الطريقة والتمرير في عنصر التحكم نفسه باستخدام {Binding RelativeSource={RelativeSource Self}, Converter={StaticResource MyConverter}}. في طريقة التحويل ، يمكنك بعد ذلك إلقاء القيمة للتحكم في خاصية اسم التحكم والوصول إليها لتمريرها إلى طريقة الأمان. عن طريق التحقق من TargetType ، يمكنك تحديد ما إذا كنت تريد إخراج منطقية (لـ Isenabled) أو تعداد الرؤية.

***تحديث

أفترض أن مورد "الإذن" المستخدم مع ملزمة المحول هو في الواقع قابلة للانتشار ولكنك تحاول استخدامه كسلسلة لتحديد عنصر حسب الاسم كمصدر ربط. جرب استخدام Source="{StaticResource PermissionsTable}" بدلاً من ذلك لتمرير مورد DataTable نفسه.

نصائح أخرى

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

إذا كنت تستخدم MVVM أو أنك لست من محبي الكود-بيرهيند ، فقد تكون هناك طريقة أخرى حول هذه المشكلة هي التخلص من اسم الزر والذهاب مع الممتلكات المرفقة. الخصائص المرفقة هي وسيلة لاستخدام إطار خاصية تبعية WPF لتخزين البيانات حول كائن أو التحكم في أن الكائن أو التحكم لم يعلن في الأصل نفسه.

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

يمكنك استخدام رد الاتصال كفرصة للتحقق من قيمة العقار مقابل كائن الأمان الخاص بك وتعيين الخصائص الممكّنة والمرئية كما تراه مناسبًا.

- Hth Dusty

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