尽管先前已经提到了同样性质的问题,并且发现了相当多的问题,但我仍然难以理解为什么这对我不起作用。
我有一个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
}
}
但我的命令永远不会被解雇。我做错了什么?
答案 0 :(得分:2)
数据绑定引擎需要public
属性private
:
您用作绑定的绑定源属性的属性必须 是你班级的公共财产。明确定义的接口 无法访问属性用于绑定目的,也不能保护, 没有基础的私有,内部或虚拟属性 实施
但是您的命令是public DelegateCommand FolderChangedCommand { get; set; }
,所以请将其更改为:
MainVM
并确保将DataContext
正确设置为窗口的{{1}}。
您可以在binding source中找到有关调试数据绑定的更多信息。