“TreeViewItem.Expanded”事件,代码如下:
<TreeView ItemsSource="{Binding Nodes}"
[Event TreeViewItem.Expanded]=[Action Expanded($this)];
[Event TreeViewItem.Collapsed]=[Action Collapsed($dataContext)]">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Nodes}">
...
</HierarchicalDataTemplate>
</TreeView.ItemTemplate></TreeView>
它不能正常工作。
这是我的ViewModel
public class MyViewModel{
.......
public void Expanded(Nodes node)
{
..........
}
}
感谢下,
Raghava
答案 0 :(得分:1)
首先,你错过了前3行中最重要代码的最大部分......
您向我们展示的代码,希望是一个错字,因为它确实是一个XAML错误。 C.M.需要附加属性 Message.Attach 。查看您要捕获的事件。请记住,这些方法的签名需要准确,否则CM将无法在您的视图模型中找到它们。
<TreeView ItemsSource="{Binding Nodes}"
Message.Attach="[Event TreeViewItem.Expanded]=[Action Expanded($this)];
[Event TreeViewItem.Collapsed]=[Action Collapsed($dataContext)]">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Nodes}">
...
</HierarchicalDataTemplate>
</TreeView.ItemTemplate></TreeView>
我的建议是首先在视图的代码隐藏中创建这些方法,然后在属性窗口中双击该事件。然后在你的viewmodel中复制方法,你可以省略某些东西,但为了它的工作,它必须按照我的指示连线。
摩根。
答案 1 :(得分:0)
如果您的要求是在视图模型中获取IsExpanded项,则可以将TreeViewItem的IsExpanded绑定到viewmodel中的属性。
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/>
</Style>
ViewModel代码:
public class ViewModel
{
private bool isExpanded;
public bool IsExpanded
{
get
{
return isExpanded;
}
set
{
isExpanded = value;
MessageBox.Show("IsExpanded changed");
}
}
}