2

同じ性質の以前に尋ねられた質問を精査し、かなりの数を見つけたにもかかわらず、なぜこれがうまくいかないのかについて、私はまだ困惑しています.

私はTreeViewを持っています -

<Window ... xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity">
    <TreeView Name="Folders" ItemsSource="{Binding Directories}">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="SelectedItemChanged">
                <i:InvokeCommandAction Command="{Binding FolderChangedCommand}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </TreeView>
</Window>

SelectedItemChanged イベントを ViewModel のコマンドにバインドしようとしています -

using Microsoft.Practices.Prism.Commands;

internal class MainVM : VMBase
{
    private DelegateCommand FolderChangedCommand { get; set; }

    public MainVM()
    {
        FolderChangedCommand = new DelegateCommand(FolderChanged);
    }

    private void FolderChanged()
    {
        // Do Stuff
    }
}

しかし、私のコマンドは決して発射されません。私は何を間違っていますか?

4

1 に答える 1

2

データ バインディング エンジンには、バインディング ソースpublicとしてプロパティが必要です。

バインディングのバインディング ソース プロパティとして使用するプロパティは、クラスのパブリック プロパティである必要があります。明示的に定義されたインターフェイス プロパティには、バインディングの目的でアクセスすることはできません。また、基本実装を持たない保護された、プライベート、内部、または仮想プロパティにもアクセスできません。

ただし、コマンドは次のprivateように変更します。

public DelegateCommand FolderChangedCommand { get; set; }

また、がウィンドウのMainVMとして正しく設定されていることも確認してください。この記事DataContextでは、データバインディングのデバッグに関する詳細情報を見つけることができます。

于 2012-09-08T07:12:22.660 に答える