我的程序中有一个xaml窗口,其中有一个名为“Save”的按钮和一个textBox
。我也有一个ViewModel用于此窗口。在ViewModel中,string
有textBox
属性,按钮上有bool
IsEnabled
属性。我希望只有在textBox
。
XAML:
<Button IsEnabled="{Binding SaveEnabled}" ... />
<TextBox Text="{Binding Name}" ... />
ViewModel属性:
//Property for Name
public string Name
{
get { return _name; }
set
{
_name = value;
NotifyPropertyChange(() => Name);
if (value == null)
{
_saveEnabled = false;
NotifyPropertyChange(() => SaveEnabled);
}
else
{
_saveEnabled = true;
NotifyPropertyChange(() => SaveEnabled);
}
}
}
//Prop for Save Button -- IsEnabled
public bool SaveEnabled
{
get { return _saveEnabled; }
set
{
_saveEnabled = value;
NotifyPropertyChange(() => SaveEnabled);
}
}
我认为我的主要问题是,我在哪里提出有关此问题的代码?正如您在上面所看到的,我已尝试将其放入setter
属性的Name
中,但它没有成功。
答案 0 :(得分:2)
你可以这样做:
public string Name
{
get { return _name; }
set
{
_name = value;
NotifyPropertyChanged(() => Name);
NotifyPropertyChanged(() => SaveEnabled);
}
}
public bool SaveEnabled
{
get { return !string.IsNullOrEmpty(_name); }
}
编辑:将此添加到您的xaml:
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}">...</TextBox>
答案 1 :(得分:2)
使用MVVM中使用的ICommands:
private ICommand _commandSave;
public ICommand CommandSave
{
get { return _commandSave ?? (_commandSave = new SimpleCommand<object, object>(CanSave, ExecuteSave)); }
}
private bool CanSave(object param)
{
return !string.IsNullOrEmpty(Name);
}
private void ExecuteSave(object param)
{
}
然后在XAML代码中使用以下内容
<TextBox Command="{Binding CommandSave}" ... />
根据您使用的框架,命令类的工作方式不同。对于通用实现,我建议Relay Command。