views:

54

answers:

3

Hi,

Any idea where I'm going wrong with this code. I wan the TextBox to be Enabled when the associated RadioButton for it is selected, and then when a different radio button is selected want it to be Enabled=False. I created a ProxyMode dependency property and have changed the getter to obtain it's bool value based on whether Proxy is selected or not. Doesn't seem to work...any ideas?

    // Proxy Host Name
    public string Proxy
    {
        get { return (string)GetValue(ProxyProperty); }
        set { SetValue(ProxyProperty, value); }
    }
    public static readonly DependencyProperty ProxyProperty =
        DependencyProperty.Register("Proxy", typeof(string), typeof(ConfigWindowViewModel), new UIPropertyMetadata("[e.g. proxy.mycompany.com]"));


    public bool ProxyMode
    {
        get { return Proxy == "Proxy"; }
        set { SetValue(ProxyModeProperty, value); }
    }
    public static readonly DependencyProperty ProxyModeProperty =
        DependencyProperty.Register("ProxyMode", typeof(bool), typeof(ConfigWindowViewModel));

And the XMAL

            <StackPanel Grid.Column="0" Margin="2">
                <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
                    <RadioButton IsChecked="{Binding Path=Mode, Converter={StaticResource enumBooleanConverter}, ConverterParameter=Proxy}" VerticalAlignment="Center" Padding="2,0,10,0">Proxy</RadioButton>
                    <TextBox Text="{Binding Path=Proxy}" 
                             IsEnabled="{Binding Path=ProxyMode}"
                             Width="Auto" Name="ProxyHostTextBox" VerticalAlignment="Center" MinWidth="150" 
                    />

                </StackPanel>   
                <RadioButton IsChecked="{Binding Path=Mode, Converter={StaticResource enumBooleanConverter}, ConverterParameter=Direct}">Direct</RadioButton>
            </StackPanel>

thanks

+1  A: 

Hello,

The easiest way to enable/disable the textbox based on whether the proxy RadioButton is checked is to bind the IsEnabled property of the TextBox directly to the IsChecked property of the proxy RadioButton. Assuming the proxy RadioButton is named "proxy":

<TextBox Text="{Binding Path=Proxy}" IsEnabled="{Binding ElementName=proxy, Path=IsChecked}"/>

If you meant for your RadioButton controls to be linked so that only one can be selected at once, you need to set the GroupName property to something on both of them (it should be the same for all linked RadioButton controls).

Let me know if you have further questions.

chrensli
A: 

think I came up with a better way to do this - so the question probably isn't a good one to ask - the following without dependency property seem ok

        <StackPanel Grid.Column="0" Margin="2">
            <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
                <RadioButton IsChecked="{Binding Path=Mode, Converter={StaticResource enumBooleanConverter}, ConverterParameter=Proxy}" VerticalAlignment="Center" Padding="2,0,10,0" Name="ProxyModeRadioButton">Proxy</RadioButton>
                <TextBox Text="{Binding Path=Proxy}" 
                         IsEnabled="{Binding ElementName=ProxyModeRadioButton, Path=IsChecked}"
                         Width="Auto" Name="ProxyHostTextBox" VerticalAlignment="Center" MinWidth="150" 
                />

            </StackPanel>   
            <RadioButton IsChecked="{Binding Path=Mode, Converter={StaticResource enumBooleanConverter}, ConverterParameter=Direct}">Direct</RadioButton>
        </StackPanel>
Greg
You posted this seconds after my answer, but yeah, same thing basically as what I answered.
chrensli
+1  A: 

As with the second version of this question:

<RadioButton x:Name="RadioButton2" />
<TextBox IsEnabled="{Binding IsChecked, ElementName=RadioButton2}" />
Jay