Попытка получить IsEnabled для привязки к свойству зависимости - PullRequest
1 голос
/ 10 сентября 2010

Любая идея, где я ошибаюсь с этим кодом. Я хочу, чтобы TextBox был включен, когда для него выбран соответствующий RadioButton, а затем, когда выбран другой переключатель, я хочу, чтобы он был включен = False Я создал свойство зависимостей ProxyMode и изменил метод получения, чтобы получить его значение bool в зависимости от того, выбран Proxy или нет. Кажется, не работает ... какие-либо идеи?

// 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));

И XAML

<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>

Ответы [ 3 ]

4 голосов
/ 10 сентября 2010

Самый простой способ включить / отключить текстовое поле в зависимости от того, установлен ли прокси RadioButton, - это привязать свойство IsEnabled TextBox непосредственно к свойству IsChecked прокси RadioButton.Предполагая, что прокси RadioButton называется «proxy»:

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

Если вы хотели связать элементы управления RadioButton, чтобы можно было выбрать только один, вам нужно установить для свойства GroupName что-то на обоихиз них (должно быть одинаковым для всех связанных элементов управления RadioButton).

Дайте мне знать, если у вас есть дополнительные вопросы.

2 голосов
/ 10 сентября 2010

Как и во второй версии этого вопроса:

<RadioButton x:Name="RadioButton2" />
<TextBox IsEnabled="{Binding IsChecked, ElementName=RadioButton2}" />
0 голосов
/ 10 сентября 2010

думаю, что я придумал лучший способ сделать это - так что вопрос, вероятно, не очень хороший, чтобы задать вопрос - следующее без свойства зависимости выглядит нормально

        <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>
...