Silverlight 2动态数据绑定转换器

时间:2009-04-21 01:22:04

标签: silverlight xaml dynamic binding converter

在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 个答案:

答案 0 :(得分:2)

发现解决方案.... 基本上我必须创建一个转换器类的实例,并将其接口传递给转换器:

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

很高兴它变得简单而可行:)

答案 1 :(得分:0)

虽然有可能,正如您所知,您确定要动态创建RadioButton吗?

我去过那里......我写了完全相同的代码......但我很快意识到我做错了。在我的例子中,我使用了ItemsControl,并使用模板绑定了值...完全不需要自己动态创建它们。

我显然不知道更大的上下文,但考虑一下你是否应该使用某种动态容器更加声明性地做这件事。

实际上,在我发现MVVM之后,我完全消除了UI层对数据转换器的需求。数据转换器已经过时了MVVM:)