Pergunta

No Silverlight 2 ....

Eu tenho um RadioButton no meu código xaml da seguinte forma:

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

Isso funciona muito bem. Meu problema é na tentativa de duplicar este functionallity dinamicamente.

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

Isso funciona, mas quando eu tento colocar o conversor em, ele quebra. Qual é a maneira correta de fazer isso? Qualquer bom exemplos de trabalho?

Aqui está o que eu tentei ....

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);

Embora isso compila bem, ele não funcionar corretamente. 1) Como faço para referenciar o recurso estático dinamicamente? 2) Como faço para adicionar este recurso estático para o XAML dinamicamente? Agora eu tenho essa referência codificado.

Eu estou fazendo isso mais difícil do que ele precisa ser?

Foi útil?

Solução

Solução encontrada .... Basicamente eu tive que criar uma instância da classe de conversor e passar de interface que seja para o conversor como tal:

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

Ainda bem que acabou simples e factível:)

Outras dicas

Embora seja possível, como você descobriu, você tem certeza que quer ser a criação do RadioButton dinamicamente?

Eu estive lá ... Eu escrevi exatamente o mesmo código ... mas eu logo percebi que eu estava fazendo errado. No meu caso, eu usei um ItemsControl, e amarrou os valores usando um modelo ... eliminando completamente a necessidade de criá-los sozinha dinamicamente.

Eu, obviamente, não sei o contexto mais amplo, mas considerar se você deveria estar fazendo isso mais declarativamente usando algum tipo de recipiente dinâmica vez.

Na verdade, depois que eu descobri MVVM, eu eliminado completamente a necessidade de conversores de dados na camada de interface do usuário. conversores de dados estão obsoletos com MVVM:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top