【发布时间】:2025-12-16 22:20:03
【问题描述】:
我正在尝试使用 MVVM 做一些不同的事情。在我们的 ViewModel 中,绑定到 View 的属性是公开的。我以按钮绑定为例。这是一个简单的示例。
View.xaml:
<Button Content="Test Button" Command="{Binding TestButtonCommand}" />
ViewModel.cs
private ICommand _testButtonCommand;
public ICommand TestButtonCommand
{
get { return _testButtonCommand?? (_testButtonCommand= new RelayCommand(SomeMethod)); }
}
我的问题是我们可以将TestButtonCommand 设为内部而不是公开吗?内部意味着当前项目可以访问它,所以他们这样做应该没有问题吗?但是当我试图这样做时,它没有奏效。在 getter 中添加断点未命中。那么为什么我们不能让它内部化呢?
这是来自 msdn 的链接。
http://msdn.microsoft.com/en-us/library/ms743643.aspx
您用作绑定源属性的属性必须 成为您班级的公共财产。明确定义的接口 不能出于绑定目的访问属性,也不能受保护, 没有基础的私有、内部或虚拟属性 实施。
为什么我们不能这样做?
如果在同一个项目中工作,访问 internal 与 public 相同。那为什么我们不能在这里使用 internal 呢?这些应该公开肯定是有原因的,我正在寻找这个原因。
internal ICommand TestButtonCommand { ...... }
【问题讨论】:
-
因为you can only bind to public properties, sub-properties and indexers or any CLR object。为什么 WPF 团队会做出这样的设计决定?我不知道,你应该问他们:)
-
它是微软,所以我们无能为力,