在WPF中将IsEnabled属性绑定到布尔值

5

我有一个需要通过编程启用/禁用的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属性也被绑定了;它是完全可用的,这使我认为这不是数据上下文的问题。
然而,当我调用这段代码时:
private Boolean _textbox_enabled;
public Boolean Textbox_Enabled
{
    get { return _textbox_enabled; }
    set
    {
        OnPropertyChanged("TextBoxEnabled");
    }
}

它不起作用。为了提供进一步的信息,这个方法会改变TextBox_Enabled属性:

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

当按下键盘组合键时,会调用该函数。


@Stígandr 有一个正确的答案,但是我想指出最佳实践是在引用代码元素的字面名称时使用nameof()。例如,如果你的代码行是OnPropertyChanged(nameof(TextboxEnabled)),IDE会为你指出错误,因为没有这样的属性存在。而且,当你使用重命名功能更改属性名称时,它会自动更新。 - Ethan Maness
1个回答

18

这里是您的小错别字!

    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}"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接