0

在银光 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?现在我有这个参考硬编码。

我是否让这变得比需要的更困难?

4

2 回答 2

2

找到解决方案....基本上我必须创建转换器类的实例并将其接口传递给转换器,如下所示:

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

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

于 2009-04-21T19:16:26.747 回答
0

尽管有可能,但正如您所发现的,您确定要动态创建 RadioButton 吗?

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

我显然不知道更大的上下文,但请考虑您是否应该使用某种动态容器以更具声明性的方式执行此操作。

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

于 2009-04-21T19:25:11.750 回答