Using enum descriptions to string/text binding
This looks perfectly reasonable.  In fact, the only thing I would really change is this:



string parameterString = parameter as string;
if ( parameterString == null )
    return DependencyProperty.UnsetValue;

if ( Enum.IsDefined (value.GetType (), value) == false )
    return DependencyProperty.UnsetValue;


You have this in both Convert methods, and it would be just as clear like this:

string parameterString = parameter as string;
if ( parameterString == null || !Enum.IsDefined (value.GetType (), value) )
    return DependencyProperty.UnsetValue;


Additionally, you could concatenate this:

object parameterValue = Enum.Parse (value.GetType (), parameterString);
return parameterValue.Equals (value);


Like this:

return Enum.Parse (value.GetType(), parameterString).Equals (value);


For your XAML, you do not need to put each property on its own individual line.  I typically only break them up when they do not fit on my screen all at once, more like this

&lt;TextBlock Text="How do you measure distance?" Margin="6,0,0,0" Grid.ColumnSpan="2" Grid.Row="0" /&gt;
&lt;RadioButton Grid.Row="1" Grid.Column="0"
             Content="{Binding PreferredUnit, ConverterParameter=Metric, Converter={StaticResource EnumToStringConverter}}"
             IsChecked="{Binding PreferredUnit, ConverterParameter=Metric, Converter={StaticResource EnumToBooleanConverter}, Mode=TwoWay}" /&gt;


Finally, for your UI, you most likely want to label your radio buttons as what they are, and perhaps change your UI a little to accommodate the labels and still look good.  I would recommend a ComboBox if you have trouble adjusting the UI to look good.  You could then bind the SelectedItem or SelectedIndex to a value in your VM and use a converter to change the value as needed.

&lt;ComboBox Text="Label"&gt;
    &lt;ComboBoxItem&gt;Metric (meters)&lt;/ComboBoxItem&gt;
    &lt;ComboBoxItem&gt;Imperial (feet)&lt;/ComboBoxItem&gt;
&lt;/ComboBox&gt;