Xaml绑定收音机/复选框以在英制/公制之间切换

时间:2011-01-03 15:10:23

标签: wpf xaml binding

就像标题所说的那样,我正在从Db中获取一些值,这些值都是以Km为单位,但我想实现一个转换器,我可以在Miles或Kilometers之间切换,并希望绑定显示到复选框或单选按钮组,以最简单的方式(首选收音机)。

我想我可以使用IValueConverter而不是IMultiValueConverter,以及Convert / ConvertBack方法,因为默认值是公里,但我不知道如何调用ConvertBack方法。或者我可以传递true / false作为ConverterParameter,具体取决于我是否要显示Km / Miles。

但无论哪种方式,我都不确定如何在任何一种方法上连接Xaml Binding(我知道如何进行标准值转换器绑定,但不需要额外的flumff。

任何提示都表示赞赏。

<StackPanel Grid.Row="0" Grid.ColumnSpan="2" Orientation="Horizontal" HorizontalAlignment="Right">
    <RadioButton Content="Km" GroupName="rdBtnGrpValue" IsChecked="True" />
    <RadioButton Content="Miles" GroupName="rdBtnGrpValue" />
</StackPanel>

<TextBox HorizontalAlignment="Stretch" VerticalAlignment="Top" Grid.Column="1" Text="{Binding EquatorialCircumference, Converter={StaticResource KmMiConv}, StringFormat='{}{0:0,0.0}'}" />

1 个答案:

答案 0 :(得分:2)

如果您正在使用MVVM模式,并且正在使用视图模型作为DataContext,则可以在Mode=TwoWay s和布尔属性之间使用RadioButton绑定视图模型,类似于bool ConvertToImperial { get; set; }

您的实际转化可能发生在EquatorialCircumference属性的getter中。如果ConvertToImperialtrue,则返回以英里为单位的值,否则返回以千米为单位的值。

然后,对于TextBox,您只需将其绑定到EquatorialCircumference属性,显示的值就会显示在所选单位中。

但是,您需要针对其值受单位变化影响的任何属性提出属性更改通知。