Привязать свойство IsEnabled к логическому значению в WPF

1

У меня есть TextBox который должен быть включен/отключен программно. Я хочу достичь этого, используя привязку к Boolean. Вот TextBox XAML:

<TextBox Height="424" HorizontalAlignment="Left" 
                 Margin="179,57,0,0" Name="textBox2" 
                 VerticalAlignment="Top" Width="777"
                 TextWrapping="WrapWithOverflow" 
                 ScrollViewer.CanContentScroll="True" 
                 ScrollViewer.VerticalScrollBarVisibility="Auto" 
                 AcceptsReturn="True" AcceptsTab="True" 
                 Text="{Binding Path=Text, UpdateSourceTrigger=PropertyChanged}"
                 IsEnabled="{Binding Path=TextBoxEnabled}"/>

Обратите внимание, что свойство Text также привязано; он полностью функциональный, что заставляет меня думать, что это не проблема DataContext.

Однако, когда я вызываю этот код:

private Boolean _textbox_enabled;
public Boolean Textbox_Enabled
{
    get { return _textbox_enabled; }
    set
    {
        OnPropertyChanged("TextBoxEnabled");
    }
}

Это не работает. Чтобы предоставить дополнительную информацию, свойство TextBox_Enabled изменяется следующим образом:

public void DisabledTextBox()
{
     this.Textbox_Enabled = false;
}

.. который вызывается, когда нажата комбинация клавиш.

Теги:
xaml
wpf
binding
isenabled

1 ответ

6
Лучший ответ

Вот ваши маленькие опечатки!

    private Boolean _textbox_enabled;
    public Boolean TextboxEnabled // here, underscore typo
    {
        get { return _textbox_enabled; }
        set
        {
            _textbox_enabled = value; // You miss this line, could be ok to do an equality check here to. :)
            OnPropertyChanged("TextboxEnabled"); // 
        }
    }

Другое дело, что ваш xaml обновляет текст до vm/datacontext

Text="{Binding Path=Text, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" IsEnabled="{Binding TextBoxEnabled}"/>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню