私はMVVMを使っていくつかの異なることを試みています。View にバインドされている ViewModel プロパティは public です。ボタンバインディングの例をとっています。ここに簡単なサンプルがあります。
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 { ...... }