我将按照article使用MVVMC创建一个wpf向导应用程序。
我想做的是禁用按钮时,文本框的内容是空的。添加文本更改事件以检查用户的输入。如果为空,则调用RaiseCanExecuteChanged
以触发按钮的canExecute()
。但是canExecute不会被触发。
我在wpf用户控件中测试了这些代码,它可以被触发。但是当我把它们移到MVVMC时,它不起作用。
下面是代码片段。我上传完整的项目到repo
示例1:
<TextBox Text="{Binding ComputerName}" TextChanged="ComputerName_TextChanged"/>
<Button Command="{Binding TestCommand}">Test</Button>
字符串
xaml.cs:
private void ComputerName_TextChanged(object sender, TextChangedEventArgs e)
{
viewModel.HandleComputerNameTextChanged(((TextBox)sender).Text);
}
型
视图模型:
private string computerName = "";
public string ComputerName
{
get
{
return computerName;
}
set
{
computerName = value;
OnPropertyChanged();
}
}
internal void HandleComputerNameTextChanged(string text)
{
ComputerName = text;
TestCommand.RaiseCanExecuteChanged();
}
public ICommand _testCommand;
public virtual ICommand TestCommand
{
get
{
if (_testCommand == null)
{
_testCommand = new DelegateCommand(
() =>
{
MessageBox.Show("test");
},
() => canGotoNext());
}
return _testCommand;
}
}
public virtual bool canGotoNext()
{
if (string.IsNullOrEmpty(ComputerName))
{
return false;
}
else
{
return true;
}
}
型
1条答案
按热度按时间i34xakig1#
设置
UpdateSourceTrigger=PropertyChanged
而不是使用TextChanged
事件来触发命令CanExecute()
。XAML:
字符串
视图模型:
型