Конвертер динамического связывания данных Silverlight 2 - PullRequest
0 голосов
/ 21 апреля 2009

В Silverlight 2 ....

В моем коде xaml есть RadioButton следующим образом:

<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 динамически? Прямо сейчас у меня есть эта ссылка в жестком коде.

Я делаю это сложнее, чем нужно?

Ответы [ 2 ]

2 голосов
/ 21 апреля 2009

Решение найдено .... По сути, мне пришлось создать экземпляр класса преобразователя и передать его интерфейс преобразователю следующим образом:

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

Рад, что все оказалось просто и выполнимо:)

0 голосов
/ 21 апреля 2009

Хотя это возможно, как вы выяснили, вы уверены, что хотите динамически создавать RadioButton?

Я был там ... Я написал точно такой же код ... но я скоро понял, что просто делал это неправильно. В моем случае я использовал ItemsControl и связывал значения с помощью шаблона ... полностью исключая необходимость их динамического создания.

Я, очевидно, не знаю большего контекста, но подумайте, стоит ли вам делать это более декларативно, используя вместо этого какой-то динамический контейнер.

На самом деле, после того, как я обнаружил MVVM, я полностью исключил необходимость в преобразователях данных на уровне пользовательского интерфейса. Преобразователи данных устарели с MVVM:)

...