所以我有这个观点:
<StackPanel>
<TextBox x:Name="Name"/>
<Button x:Name="SayHello"
Content="Click Me" />
</StackPanel>
我有这个ViewModel:
internal class ShellViewModel : PropertyChangedBase
{
private string name;
public string Name
{
get { return name; }
set
{
name = value;
NotifyOfPropertyChange(() => Name);
NotifyOfPropertyChange(() => CanSayHello());
}
}
public bool CanSayHello()
{
bool isenabled = !string.IsNullOrWhiteSpace(Name);
return isenabled;
}
public void SayHello()
{
MessageBox.Show(string.Format("Hello, {0}!", Name));
}
}
但每当我在文本框中输入一些值时,我就会遇到这个例外:
{&#34;无法投射类型&#39; System.Linq.Expressions.InstanceMethodCallExpressionN&#39;输入&#39; System.Linq.Expressions.MemberExpression&#39;。&#34;}
在我开发的商业应用中,我必须将VM中的CanSayHello()成员作为方法,而不是属性。我该怎么办?
答案 0 :(得分:2)
您有异常,因为您在CanSayHello上调用NotifyOfPropertyChange而CanSayHello是一个方法,而不是属性。
更改为:
public bool CanSayHello
{
get { return !string.IsNullOrWhiteSpace(Name); }
}
答案 1 :(得分:-2)
您应该使用命令将操作绑定到UI项目。有一个名为ICommand
的{{1}}实现,通常用于大多数WPF项目。它允许您使用方法,属性或谓词。
RelayCommand