سؤال

في Silverlight 2 ....

لدي راديوبوتون في رمز XAML الخاص بي كما يلي:

<RadioButton GroupName="Gender" Content="Male" IsChecked="{Binding Path=Gender, ConverterParameter=1, Mode=TwoWay, Converter={StaticResource RadioStringConverter}}" Width="49" HorizontalAlignment="Left"/>

هذا يعمل عظيم. مشكلتي في محاولة تكرار هذه المهنة بشكل حيوي.

RadioButton rb = new RadioButton() {GroupName = "Gender", Content = "Male" ,Width = (double)49,HorizontalAlignment = System.Windows.HorizontalAlignment.Left};

هذا يعمل ولكن عندما أحاول وضع المحول فيه، فواصل. ما هي الطريقة الصحيحة للقيام بهذا العمل؟ أي أمثلة عمل جيدة؟

هنا ما حاولت ....

RadioButton rb = new RadioButton() {GroupName = "Gender", Content = "Male" ,Width = (double)49,HorizontalAlignment = System.Windows.HorizontalAlignment.Left};

RadioStringConverter rsc = new RadioStringConverter();

Binding binding = new Binding(layout.FieldName) { Source = mainLayout.DataContext, Mode = BindingMode.TwoWay,ConverterParameter = 1,Converter = rsc};  // to emulate the "{StaticResource RadioStringConverter}"};

rb.SetBinding(RadioButton.IsCheckedProperty, binding);

sp.Children.Add(rb);

على الرغم من أن هذا يجمع بشكل جيد، فإنه لا يعمل بشكل صحيح. 1) كيف يمكنني الإشارة إلى المورد الثابت ديناميكيا؟ 2) كيف أضيف هذا المورد الثابت إلى XAML ديناميكيا؟ الآن لدي هذا المرجع المشفرة الثابت.

هل سأجعل هذا أكثر صعوبة مما يجب أن يكون؟

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

المحلول

تم العثور على الحل .... في الأساس، اضطررت إلى إنشاء مثيل من فئة المحول ونقله واجهة المحول على هذا النحو:

Binding binding = new Binding(layout.FieldName) { Source = mainLayout.DataContext, Mode = BindingMode.TwoWay,ConverterParameter = 1,Converter = (rsc as IValueConverter)};

سعيد تحولت بسيطة وقابلة للتنفيذ :)

نصائح أخرى

على الرغم من أنه من الممكن، كما اكتشفت، هل أنت متأكد أنك تريد أن تخلق Radiobutton ديناميكيا؟

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

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

في الواقع، بعد اكتشاف MVVM، ألغي تماما الحاجة إلى محولات البيانات في طبقة UI. محولات البيانات عفا عليها الزمن مع MVVM :)

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