我有时厌倦了为 MVVM UI 上的每个单选按钮创建单独的 IsChecked*SomePropertyName*。另一种方法是命名每个按钮并找到 IsChecked=true 的按钮,然后将其名称转换为我的强文本模型中有意义的东西。
如果有一种方法可以支持 Silverlight 和/或 WPF 以拥有一个封装所有这些易变逻辑的集合,那就太好了。我的代码中的一个示例用例是:
<Page x:Name="idHost"
...>
<TextBlock Text="{Binding Path=RadioButtonSource.CurrentEnabledButton, Mode=OneWay, StringFormat='Selected Filter: {0}', TargetNullValue='Selected Filter: not selected', ElementName=idHostPage}" />
<RadioButton IsChecked="{Binding Path=RadioButtonSource[Inherited], Mode=TwoWay, ElementName=idHostPage}"
IsThreeState="False"
GroupName="PostFilter"
Content="Inherited" />
<RadioButton IsChecked="{Binding Path=RadioButtonSource[Direct], Mode=TwoWay, ElementName=idHostPage}"
IsThreeState="False"
GroupName="PostFilter"
Content="Direct" />
...
页面后面的代码如下所示:
public partial class MyPage : Page {
public MyPage() {
this.RadioButtonSource = new RadioButtonSource();
}
public RadioButtonSource RadioButtonSource {
get { return (RadioButtonSource)GetValue(RadioButtonSourceProperty); }
set { SetValue(RadioButtonSourceProperty, value); }
}
public static readonly DependencyProperty RadioButtonSourceProperty = DependencyProperty.Register("RadioButtonSource", typeof(RadioButtonSource), typeof(MyPage), new PropertyMetadata(null));
}