text.Length>时启用按钮。 WPF中的0仅在textBox失去焦点时起作用 - 为什么?

时间:2010-06-25 06:00:04

标签: binding

简单的WPF问题 我有一个文本框和一个OK按钮,我正在使用MVVM模式。 我想要做的只是当textBox.Length>时才启用OK按钮。 0

但我得到的只是当textBox失去焦点时才启用按钮。

我错过了什么吗?

我已将datacontext绑定到viewmodel并完成以下操作。 为什么不起作用?

感谢您的帮助

XAML

<TextBox Grid.Column="1" 
              Grid.Row="2" 
             Margin="4" 
             Name="txtName" Text="{Binding Path=Name}"/>

      <Button x:Name="btnOK" 
                            MinWidth="70" Padding="3.5" 
                            Margin="3.5" 
                            Grid.Column="1" 
                            Content="OK" 
                            Click="OnOk"
                            Command="{Binding Path=OKCommand}"
                            VerticalAlignment="Center" 
                            HorizontalAlignment="Left" IsDefault="True" />

在视图模型

         public class TestViewModel : ViewModelBase
            {
                private string _name;

                public string Name
                {
                    get { return _name; }
                    set
                    {
                        _name = value;
                        OnPropertyChanged("Name");
                    }
                }
                private RelayCommand _OkCommand;
                public ICommand OKCommand
                {
                    get
                    {
                        return _OkCommand ?? (_OkCommand = new RelayCommand(x => Execute(), x => CanExecute));
                    }
                }
                private bool CanExecute
                {
                    get
                    {
                        return !string.IsNullOrEmpty(Name);            
                    }
                }
                private void Execute()
                {
                    //do something here
                }

1 个答案:

答案 0 :(得分:4)

交换此行:

Text="{Binding Path=Name}"

使用

Text="{Binding Path=Name,UpdateSourceTrigger=PropertyChanged}"

这样,每次Text-property更改时绑定都会更新。 TextBox的Text属性的默认值是LostFocus。